光标无法在vim中回到水平位置

4
当我处于正常模式时,光标的行为符合我的预期 - 考虑以下情况:
如果我按下4次向下键,光标将移动到这个位置:
但是,当我在插入模式下做同样的事情时,光标会跳到这里:
问题是:这种行为是否正确?如果是的话,原因是什么,如何更改它(如果可能)?
我的简短.vimrc文件:
set tabstop=4
set softtabstop=4
set shiftwidth=4
set smartindent
set mouse=a
set number
set ai
set nowrap
set viminfo='100,<5000,s1000

4
Vim 有一个 bug,影响了这个功能。在几个月前的 Vim 7.4.659 中修复了这个问题。 - Sato Katsura
@SatoKatsura 对我来说,7.4.769和7.4.827都无法正常工作。我回退到了7.4.273,现在一切都很好。 - martinkunev
1
@martinkunev 那么你有一个选择:留在7.4.273版本并永远使用它,幸福地生活下去,或者向vim_dev报告问题。 - Sato Katsura
1个回答

2
这个问题一直困扰着我,今天我在同一主题下找到了这个回答的问题:https://vi.stackexchange.com/questions/3021/vim-forgets-cursor-column-when-i-move-over-a-line-that-ends-with-a-brace-in-inse
答案不是很准确(按照它的方式精确地执行会在vim运行时产生错误),但我设法修改它以正常工作。下面是我所做的更改:
在负责突出显示匹配括号的文件 /usr/share/vim/vim74/plugin/matchparen.vim 中的90-100行,有以下代码片段:
let has_getcurpos = exists("*getcurpos")
if has_getcurpos
  " getcurpos() is more efficient but doesn't exist before 7.4.313.
  let save_cursor = getcurpos()
else
  let save_cursor = winsaveview()
endif

问题出在 getcurpos() 函数上 - 由于某些原因它似乎无法正常工作。因此,在该代码的第一行后面添加了一个覆盖:
let has_getcurpos = 0

这可以解决这个问题。

你能否使用最新的vim从这里开始重现问题:vim -u NONE -N?请发布显示此行为的确切步骤,以便可以修复它。 - Christian Brabandt
在开始时,输入命令::so /usr/share/vim/vim74/plugin/matchparen.vim 来加载插件(在Ubuntu中默认启用,但使用 -u NONE 禁用它)。然后,在插入模式下键入:aaaa{<ENTER>}<ENTER>aaaa,然后不退出插入模式,按两次向上箭头。光标将位于第一行,第二列,而期望的结果应该是第一行,第五列。我正在使用Ubuntu存储库中的任何版本,7.4.712。 - akrasuski1
2
找到了。问题出在cursor()调用上。我在这里发布了一个补丁 - Christian Brabandt

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