当我用:w
写入文件时,vim有时(不是总是)在写操作完成后跳转到文件的末尾。我不明白为什么会这样。我一直在浏览我的.vimrc,看看我是否有某种bug。我的.vimrc非常大,所以我不在这里包含完整的源代码,我认为我的.vimrc中可能与这个问题相关的部分是以下部分:
nore ; :
inoremap jj <Esc>
" Automatically remove all trailing whitespace.
" Every time the user issues a :w command, Vim will automatically remove all
" trailing whitespace before saving
autocmd BufWritePre * :%s/\s\+$//e
" Restore cursor position
au BufReadPost *
\ if line("'\"") > 0|
\ if line("'\"") <= line("$")|
\ exe("norm '\"")|
\else|
\exe "norm $"|
\endif|
\endif
但是我不知道我的.vimrc的这些部分在写完后会如何导致跳转行为,我的.vimrc的完整源代码可用here。我希望有人知道导致不必要的跳跃的原因。
答案 0 :(得分:3)
以下是来自~/.vimrc
的命令:
command! -range=% TR mark `|execute <line1> . ',' . <line2> . 's/\s\+$//'|normal! ``
诀窍是在修剪之前创建标记`然后再跳回它。
您可以将autocmd
更改为:
autocmd BufWritePre * :mark `|%s/\s\+$//e|normal! ``
答案 1 :(得分:0)
即使使用@ romainl添加标记,这仍然不是完全透明的:
winsaveview()
而不是标记会修复此问题):s
命令破坏了最后一次搜索模式插件(如我的DeleteTrailingWhitespace plugin)将提供更强大的解决方案。 (插件页面包含指向其他插件的链接。)