Answers:
要保持光标位置,请使用类似以下内容:
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上也进行了大量讨论。