Vim

如何在 Vi 和 Vim 中保存時自動去除尾隨空格?

  • March 2, 2017

保存文件時是否有.vimrc自動刪除尾隨空格的設置?

理想情況下(為了安全起見)我只想為某些文件提供此功能,例如*.rb

這適用於所有文件(在 .vimrc 文件中):

autocmd BufWritePre * :%s/\s\+$//e

這僅適用於 ruby​​(.rb) 文件(在 .vimrc 文件中):

autocmd BufWritePre *.rb :%s/\s\+$//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(".")

引用自:https://unix.stackexchange.com/questions/75430