如何在 Vi 和 Vim 中自动删除保存时的尾随空格?

如何在 Vi 和 Vim 中自动删除保存时的尾随空格?

是否有.vimrc设置可以在保存文件时自动删除尾随空格?

理想情况下(为了安全起见)我只想对某些文件具有此功能,例如*.rb

答案1

这适用于所有文件(在 .vimrc 文件中):

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

这仅适用于 ruby​​(.rb) 文件(在 .vimrc 文件中):

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

答案2

要保持光标位置,请使用以下命令:

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.

也可以使用,但在这种情况下不需要,获取位置()经过:

let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)

" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")

答案3

我的删除尾随空白插件这样做,与各种简单的浮动相比:autocmds,还处理特殊情况,可以查询用户,或中止带有尾随空格的写入。

插件页面包含替代方案的链接;还有一个很大的讨论Vim 技巧维基

相关内容