写入后Vim不需要跳转到文件结尾

时间:2014-08-15 10:50:46

标签: vim

当我用: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。我希望有人知道导致不必要的跳跃的原因。

2 个答案:

答案 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)将提供更强大的解决方案。 (插件页面包含指向其他插件的链接。)