Я отримую помилки у пробілі, намагаючись зробити деякі файли в git.
Я хочу видалити ці символи пробілів пробілу автоматично перед збереженням файлів python.
Чи можете ви налаштувати vim для цього? Якщо так, то як?
Я отримую помилки у пробілі, намагаючись зробити деякі файли в git.
Я хочу видалити ці символи пробілів пробілу автоматично перед збереженням файлів python.
Чи можете ви налаштувати vim для цього? Якщо так, то як?
Відповіді:
Я знайшов відповідь тут .
Додавши до мого .vimrc-файлу наступне:
autocmd BufWritePre *.py :%s/\s\+$//e
e
в кінці означає, що якщо ми не знайшли шаблон, vi не вважає команду-замінник невдалою
Компіляція вище плюс збереження позиції курсору:
fun! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
keepp %s/\s\+$//e
call cursor(l, c)
endfun
autocmd FileType c,cpp,java,php,ruby,python autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces()
Якщо ви хочете застосувати це для збереження до будь-якого файлу, залиште другий autocmd
і використовуйте підстановку *
:
autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()
autocmd FileType c,cpp,java,php,ruby,python
частину, щоб застосувати її до всіх файлів.
<buffer>
з , *
якщо ви хочете , щоб працювати з усіма файлами
keepp
, це не змінить історію пошуку, тобтоkeepp %s/\s\+$//e
У мене також зазвичай є:
match Todo /\s\+$/
в моєму .vimrc
файлі, так що пробіли в кінці рядка є прихованими.
Todo - це назви групи синтаксису hilighting, яка використовується для ключових слів hilighting типу TODO
, FIXME
або XXX
. Він має набридливо потворний жовтуватий колір фону, і я вважаю, що найкраще захищати речі, які ви не хочете, у своєму коді :-)
:hi Todo
. Тож я ознайомився :hi <Tab>
і :help hi
. Я розглядав Cursor
і Error
, але думаю, що спробую match VisualNOS /\s\+$/
. Я можу поєднати це з деякими autocmd
з інших відповідей тут.
Я обидва підкреслюю існуючу пробільну пробіл, а також знімаю пробіли.
Я налаштовую свій редактор (vim) для відображення пробілу в кінці, наприклад
з цим у нижній частині мого .vimrc:
highlight ExtraWhitespace ctermbg=red guibg=red
match ExtraWhitespace /\s\+$/
autocmd BufWinEnter * match ExtraWhitespace /\s\+$/
autocmd InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
autocmd InsertLeave * match ExtraWhitespace /\s\+$/
autocmd BufWinLeave * call clearmatches()
і я "автоматично знімаю" його з файлів під час збереження, в моєму випадку * .rb для файлів з рубінами, знову в моєму ~ / .vimrc
function! TrimWhiteSpace()
%s/\s\+$//e
endfunction
autocmd BufWritePre *.rb :call TrimWhiteSpace()
Скопійовано та вставлено з http://blog.kamil.dworakowski.name/2009/09/unobtrusive-highlighting-of-trailing.html (посилання більше не працює, але потрібний біт знаходиться нижче)
"Це має перевагу в тому, що не виділяти кожен пробіл, який ви вводите в кінці рядка, лише коли ви відкриєте файл або залишите режим вставки. Дуже акуратно."
highlight ExtraWhitespace ctermbg=red guibg=red
au ColorScheme * highlight ExtraWhitespace guibg=red
au BufEnter * match ExtraWhitespace /\s\+$/
au InsertEnter * match ExtraWhitespace /\s\+\%#\@<!$/
au InsertLeave * match ExtraWhiteSpace /\s\+$/
Це рішення я побачив у коментарі на VIM Wikia - Видаліть небажані пробіли
Мені це дуже сподобалось. Додає .
на небажані білі пробіли.
.vimrc
" Removes trailing spaces
function TrimWhiteSpace()
%s/\s*$//
''
endfunction
set list listchars=trail:.,extends:>
autocmd FileWritePre * call TrimWhiteSpace()
autocmd FileAppendPre * call TrimWhiteSpace()
autocmd FilterWritePre * call TrimWhiteSpace()
autocmd BufWritePre * call TrimWhiteSpace()
Ось як я це роблю. Я не можу пригадати, звідки я його вкрав у ТБГ.
autocmd BufWritePre * :call <SID>StripWhite()
fun! <SID>StripWhite()
%s/[ \t]\+$//ge
%s!^\( \+\)\t!\=StrRepeat("\t", 1 + strlen(submatch(1)) / 8)!ge
endfun
%s
глобальний прапор (g) такий же марний, як і простір у EOL :-)
Рішення, яке просто позбавляє пробілу білого простору з файлу, неприйнятне за будь-яких обставин. Він працюватиме над проектом, який проводив цю політику з самого початку, і тому немає таких пробілів, які б ви не просто додали себе у майбутньому зобов'язанні.
Припустимо, ви хочете просто не додавати нові екземпляри пробілу пробілів, не впливаючи на наявний пробіл у рядках, які ви не редагували, щоб не допустити змін, які не стосуються вашої роботи.
У такому випадку за допомогою git ви можете використовувати такий сценарій:
#!/bin/sh
set -e # bail on errors
git stash save commit-cleanup
git stash show -p | sed '/^\+/s/ *$//' | git apply
git stash drop
Тобто, ми зберігаємо зміни, а потім фільтруємо всі +
рядки в розріз, щоб видалити їх пробільний пробіл, коли ми повторно застосуємо зміни до робочого каталогу. Якщо ця командна труба успішна, ми скидаємо скриньку.
Інші підходи тут якось не працювали для мене в MacVim при використанні у .vimrc
файлі. Отже, ось, що робить і висвітлює пробіли:
set encoding=utf-8
set listchars=trail:·
set list
set listchars=trail:·
кажучи: E474: Invalid argument: listchars=trail:·
. Чи можете ви підтвердити свій приклад?
autocmd BufWritePre * :%s/\s\+$//<CR>:let @/=''<CR>
Для людей, які хочуть запустити його для певних типів файлів (FileTypes не завжди є надійними):
autocmd BufWritePre *.c,*.cpp,*.cc,*.h,*.hpp,*.py,*.m,*.mm :%s/\s\+$//e
Або з vim7:
autocmd BufWritePre *.{c,cpp,cc,h,hpp,py,m,mm} :%s/\s\+$//e
Якщо обрізати пробіли, слід робити це лише у файлах, які вже є чистими. "Коли в Римі ...". Це хороший етикет під час роботи над базами кодів, де помилкові зміни не бажані.
Ця функція розпізнає пробіли пробілу та вмикає обрізку лише в тому випадку, якщо вона вже була чистою.
Заслуга цієї ідеї притаманна дорогоцінному коментарю тут: https://github.com/atom/whitespace/isissue/10 (потік коментарів із найдовшим повідомленням про помилку)
autocmd BufNewFile,BufRead *.test call KarlDetectWhitespace()
fun! KarlDetectWhitespace()
python << endpython
import vim
nr_unclean = 0
for line in vim.current.buffer:
if line.rstrip() != line:
nr_unclean += 1
print "Unclean Lines: %d" % nr_unclean
print "Name: %s" % vim.current.buffer.name
cmd = "autocmd BufWritePre <buffer> call KarlStripTrailingWhitespace()"
if nr_unclean == 0:
print "Enabling Whitespace Trimming on Save"
vim.command(cmd)
else:
print "Whitespace Trimming Disabled"
endpython
endfun
fun! KarlStripTrailingWhitespace()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
let _s=@/
та відновити його наприкінці `let @ / = _ s`. У цьому випадку ми використовуємо регістр чорної діри