在(g)Vim中是否可以将光标移动到之前的位置(当处于正常模式时)?可以在先前光标位置列表中来回循环的内容将是理想的。但是仅仅切换到最后一个位置就足够了(比如cd - in bash with目录)。

这里有一个小示范:

line |1| <- cursor position
line 2
line 3
line 4

假设是2j,现在是这样的:

line 1
line 2
line |3| <- cursor position
line 4

现在我想按一些东西(显然不是2k)移动到第一个位置,可能是到以前的位置。


最快的方法是:

''

(两个撇号)或:

``

(两个引号)。注意,不同之处在于反撇号位于行上相同的位置,而撇号位于行首。在英国键盘上,撇号更容易使用,所以我倾向于使用撇号。有很多这样有用的标记,看:help mark-motion。

对于其他一些运动(我认为不是2j),还有一个跳跃列表,让你在许多运动之间来回导航。CtrlO和CtrlI执行此导航,但请参阅:help跳转动作以获取更多信息。

右从帮助(:help跳转):

:ju[mps] Print the jump list (not a motion command). {not in Vi} {not available without the |+jumplist| feature} *jumplist* Jumps are remembered in a jump list. With the CTRL-O and CTRL-I command you can go to cursor positions before older jumps, and back again. Thus you can move up and down the list. There is a separate jump list for each window. The maximum number of entries is fixed at 100. {not available without the |+jumplist| feature}

你也可以用g;g,用于在以前的编辑位置列表中前后移动。

非美国键盘

在我的瑞士和德国键盘布局,打字;不方便地需要使用Shift键。因此,我定义g-作为g更方便的别名;在MYVIMRC美元:

" Map g- as an alias for g;
nnoremap g- g;

为什么没人能从DrAl的答案中找出问题所在? “或”并不能解决这篇文章最初的问题! 这两个命令不能用于2j这样的光标移动,至少对我来说是这样。这将使新手更加困惑。

"或'',CtrlI或CtrlO的行为基于跳转列表。2j不会将位置更改保存到跳转列表中,因此这些命令对2j无效。

或在上一个位置和当前位置之间切换。 CtrlI和CtrlO遍历跳转列表历史。

g;g,通过编辑位置移动,这也是非常常用的。