Czy jest .vimrc
ustawienie automatycznego usuwania końcowych białych znaków podczas zapisywania pliku?
Idealnie (dla bezpieczeństwa) chciałbym mieć tę funkcję tylko dla niektórych plików, np *.rb
Czy jest .vimrc
ustawienie automatycznego usuwania końcowych białych znaków podczas zapisywania pliku?
Idealnie (dla bezpieczeństwa) chciałbym mieć tę funkcję tylko dla niektórych plików, np *.rb
Odpowiedzi:
Działa to (w pliku .vimrc) dla wszystkich plików:
autocmd BufWritePre * :%s/\s\+$//e
Działa to (w pliku .vimrc) tylko dla plików ruby (.rb):
autocmd BufWritePre *.rb :%s/\s\+$//e
e
?
Aby zachować pozycję kursora, użyj czegoś takiego:
function! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
w przeciwnym razie kursor skończy na początku wiersza ostatniego zamiany po zapisaniu.
Przykład : Masz spację na końcu linii 122
, jesteś w linii 982
i wpisz :w
. Brak przywracania pozycji spowodowałby, że kursor znalazłby się na początku linii, 122
powodując w ten sposób przepływ pracy.
Skonfiguruj wywołanie funkcji za pomocą autocmd
kilku przykładów:
" Using file extension
autocmd BufWritePre *.h,*.c,*.java :call <SID>StripTrailingWhitespaces()
" Often files are not necessarily identified by extension, if so use e.g.:
autocmd BufWritePre * if &ft =~ 'sh\|perl\|python' | :call <SID>StripTrailingWhitespaces() | endif
" Or if you want it to be called when file-type i set
autocmd FileType sh,perl,python :call <SID>StripTrailingWhitespaces()
" etc.
Można również użyć, ale nie potrzebną w tym przypadku, getpos () poprzez:
let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)
" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")
Moja wtyczka DeleteTrailingWhitespace robi to i, w przeciwieństwie do różnych prostych:autocmds
, obsługuje także specjalne przypadki, może zapytać użytkownika lub przerwać pisanie z końcowymi spacjami.
Strona wtyczki zawiera linki do alternatyw; jest też duża dyskusja na Wiki Vim Tips .