我正在使用Vim 8.0,当我使用CTRL-浏览vim帮助文件跳转时,我发现当旧位置在当前时,尝试使用CTRL-O返回跳转列表时工作正常文件,但是当我尝试将CTRL-O移到上一个文件中的旧位置时,事情就会中断。不知何故,这被视为跳转本身,而不是回到跳转列表中,而是将全新的条目添加到跳转列表中。
以下是一个例子来说明。假设我在motion.txt.gz中跳转,然后使用CTRL-链接到map.txt.gz的链接并在该文件中跳转。然后我的跳转列表可能如下所示:
:jump
jump line col file/text
9 1 0 help.txt
8 1 0 motion.txt.gz
7 313 19 motion.txt.gz
6 75 6 motion.txt.gz
5 87 6 motion.txt.gz
4 96 64 motion.txt.gz
3 1 0 *map.txt* For Vim version 8.0. Last change: 2017 Mar 10
2 56 23 :lm[ap]^I{lhs} {rhs}^I^I|mapmode-l|^I^I*:lm* *:lmap*
1 361 12 *omap-info*
>
大!到现在为止还挺好。但是现在我想用CTRL-O一个接一个地浏览跳转列表,一直回到上面的#7(在motion.txt.gz中第313行第19行)。我发现CTRL-O会一直运行到上面的#3,就像这样:
:jump
jump line col file/text
6 1 0 help.txt
5 1 0 motion.txt.gz
4 313 19 motion.txt.gz
3 75 6 motion.txt.gz
2 87 6 motion.txt.gz
1 96 64 motion.txt.gz
> 0 1 0 *map.txt* For Vim version 8.0. Last change: 2017 Mar 10
1 56 23 :lm[ap]^I{lhs} {rhs}^I^I|mapmode-l|^I^I*:lm* *:lmap*
2 361 7 *omap-info*
然后下一个CTRL-O会做一些我没想到的事情。 vim神秘地将我的动作视为从motion.txt开始跳转到motion.txt的第96行col 64,而不是将我移动到跳转列表中的另一个位置,从而将motion.txt的开头添加到结尾跳转列表(以及通过vim跳转列表的规则,从列表中删除其副本):
:jump
jump line col file/text
9 1 0 help.txt
8 313 19 character |linewise|.
7 75 6 *exclusive* *inclusive*
6 87 6 *exclusive-linewise*
5 96 64 motion isn't yet), a special set of mappings can be used. See |:omap|.
4 1 0 map.txt.gz
3 56 23 map.txt.gz
2 361 7 map.txt.gz
1 1 0 *motion.txt* For Vim version 8.0. Last change: 2017 Mar 12
>
虽然最终结果是我确实在motion.txt的第96行col 64(未显示为>),但问题是我的跳转历史现在已被捏造。实际上,问题在于继续使用从上面#1到上面#2的CTRL-O(map.txt的顶部被添加,我最终到map.txt的第361行第7行)。基本上,我无法像我原先想要的那样导航回到motion.txt的第313行第19行。
真的很想了解造成这种行为的原因。我想我多年来一直在vim中遇到这个问题而且从未调查过。我希望最终找到答案。谢谢你的帮助!