Есть ли .vimrc
настройка для автоматического удаления конечных пробелов при сохранении файла?
В идеале (для безопасности) я хотел бы иметь эту функцию только для определенных файлов, например *.rb
Есть ли .vimrc
настройка для автоматического удаления конечных пробелов при сохранении файла?
В идеале (для безопасности) я хотел бы иметь эту функцию только для определенных файлов, например *.rb
Ответы:
Это работает (в файле .vimrc) для всех файлов:
autocmd BufWritePre * :%s/\s\+$//e
Это работает (в файле .vimrc) только для файлов ruby (.rb):
autocmd BufWritePre *.rb :%s/\s\+$//e
e
?
Чтобы сохранить положение курсора, используйте что-то вроде:
function! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
иначе курсор окажется в начале строки последней замены после сохранения.
Пример : у вас есть пробел в конце строки 122
, вы находитесь на линии 982
и введите :w
. Не восстановление позиции приведет к тому, что курсор окажется в начале строки122
.
Настройте вызов функции, используя autocmd
несколько примеров:
" 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.
Также можно использовать getpos () , но не нужно в этом случае :
let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)
" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")
Мой плагин DeleteTrailingWhitespace делает это и, в отличие от различных простых :autocmds
операций с плавающей запятой, также обрабатывает особые случаи, может запрашивать пользователя или прерывать записи с конечными пробелами.
Страница плагина содержит ссылки на альтернативы; Есть также большая дискуссия на Vim Tips Wiki .