保存后Vim中光标跳跃问题

7
我在使用Vim时遇到了一个奇怪的行为 - 当我保存文件(:w)时,光标会跳转到文件中的特定位置。这个位置是固定的,对于不同的文件是不同的,也就是说它可以是函数的开头等等,但如果我将行向上或向下移动,保存后的位置仍然保持不变。
我的.vimrc文件相当长,目前我只尝试了:noautocmd命令。
我该如何修复或调试这个问题?

1
也许你(或插件)重新映射了 :w。执行 ":cmap w" 命令会返回什么? - Arjen Dijkstra
:cmap w 给出了未找到映射的提示。 - valk
我找到了原因。我检查了:copen,发现它是空的。然后在:lopen中,我看到有一个来自syntastic的列表。光标跳转的位置是该列表中的第一个位置!现在只剩下如何修复它 :) - valk
1
也许这与syntastic设置有关:https://github.com/scrooloose/syntastic#3-recommended-settings - Arjen Dijkstra
2个回答

22

我遇到了相同的问题,但不是由于 syntastic_auto_jump 设置引起的,而是由于我放置了一个用于删除行末空白的命令:

我遇到了类似的问题,不是因为 syntastic_auto_jump 的设置,而是因为我添加了一个去除行尾空格的命令:

autocmd FileType * autocmd BufWritePre <buffer> :%s/\s\+$//e

将光标移动到最后一个被替换的空格所在的行。基本上,任何改变文档并在不恢复光标的情况下更改光标的命令都可能导致类似的行为。

附:可以通过使用恢复光标的函数来修复尾随的空格,例如以下代码(取自此处)。

function! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun

autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()

或者使用一个插件,可以替换尾部空格并为您恢复光标


2

从syntastic的文档中得知:

当设置为0时,光标不会自动跳转。(let g:syntastic_auto_jump = 0

当设置为1时,无论类型如何,光标都将跳转到检测到的第一个问题。(let g:syntastic_auto_jump = 1

当设置为2时,只有当问题是错误时,光标才会跳转到检测到的第一个问题。(let g:syntastic_auto_jump = 2

当设置为3时,如果有任何错误,则光标将跳转到检测到的第一个错误。如果所有检测到的问题都是警告,则光标不会跳转。(let g:syntastic_auto_jump = 3

因此,添加

let g:syntastic_auto_jump = 0

问题已经解决。不清楚为什么问题突然出现,但是以下是解决方法,供需要的人参考。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接