保存后光标跳转 Vim
Cursor jump in Vim after save
我开始在 Vim 中遇到奇怪的行为 - 当 保存文件 (:w
) 光标跳转 到文件中的特定位置。位置是不变的,不同的文件是不同的,也就是说,它可以是函数的开头等,但是如果我向上或向下移动行,保存后的位置仍然存在。
我的 .vimrc 很长,现在我只尝试了 :noautocmd
命令。
如何修复或调试此问题?
来自 syntastic 的文档:
When set to 0
the cursor won't jump automatically. (let g:syntastic_auto_jump = 0
)
When set to 1
the cursor will always jump to the first issue detected, regardless of type. (let g:syntastic_auto_jump = 1
)
When set to 2
the cursor will jump to the first issue detected, but only if this issue is an error. (let g:syntastic_auto_jump = 2
)
When set to 3
the cursor will jump to the first error detected, if any. If all issues detected are warnings, the cursor won't jump. (let g:syntastic_auto_jump = 3
)
所以添加
let g:syntastic_auto_jump = 0
已解决问题。不清楚为什么问题突然出现,但这里是为需要它的人提供的解决方案。
我遇到了同样的问题,不是由于 syntastic_auto_jump
设置,而是由于我为尾随空格放置的命令:
autocmd FileType * autocmd BufWritePre <buffer> :%s/\s\+$//e
这是将光标移动到要替换空格的最后一行。本质上,任何类型的命令更改文档并更改光标而不恢复它都可能导致类似的行为。
P.S.: 可以通过使用恢复游标的函数来修复尾随空格,如下所示(取自 here)
function! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()
或使用替换尾随空格并为您恢复光标的插件
我开始在 Vim 中遇到奇怪的行为 - 当 保存文件 (:w
) 光标跳转 到文件中的特定位置。位置是不变的,不同的文件是不同的,也就是说,它可以是函数的开头等,但是如果我向上或向下移动行,保存后的位置仍然存在。
我的 .vimrc 很长,现在我只尝试了 :noautocmd
命令。
如何修复或调试此问题?
来自 syntastic 的文档:
When set to
0
the cursor won't jump automatically. (let g:syntastic_auto_jump = 0
)When set to
1
the cursor will always jump to the first issue detected, regardless of type. (let g:syntastic_auto_jump = 1
)When set to
2
the cursor will jump to the first issue detected, but only if this issue is an error. (let g:syntastic_auto_jump = 2
)When set to
3
the cursor will jump to the first error detected, if any. If all issues detected are warnings, the cursor won't jump. (let g:syntastic_auto_jump = 3
)
所以添加
let g:syntastic_auto_jump = 0
已解决问题。不清楚为什么问题突然出现,但这里是为需要它的人提供的解决方案。
我遇到了同样的问题,不是由于 syntastic_auto_jump
设置,而是由于我为尾随空格放置的命令:
autocmd FileType * autocmd BufWritePre <buffer> :%s/\s\+$//e
这是将光标移动到要替换空格的最后一行。本质上,任何类型的命令更改文档并更改光标而不恢复它都可能导致类似的行为。
P.S.: 可以通过使用恢复游标的函数来修复尾随空格,如下所示(取自 here)
function! <SID>StripTrailingWhitespaces()
let l = line(".")
let c = col(".")
%s/\s\+$//e
call cursor(l, c)
endfun
autocmd BufWritePre * :call <SID>StripTrailingWhitespaces()
或使用替换尾随空格并为您恢复光标的插件