在 (g)Vim 中是否可以将光标移动到之前的位置(在正常模式下)?在以前的光标位置列表中来回循环的东西是理想的。但也只需切换到最后一个位置就足够了(类似于 bash 中的 cd -
和目录)。
这是一个小演示:
line |1| <- cursor position
line 2
line 3
line 4
假设我做了 2j
,现在是这样的:
line 1
line 2
line |3| <- cursor position
line 4
现在我想按一些东西(显然 2k
除外)移回第一个位置,也可能移到以前的位置。
最快的方法是点击:
''
(两个撇号)或:
``
(两个反引号)。请注意,不同之处在于反引号指向行上的相同位置,而撇号则指向行首。在英国键盘上,撇号更容易理解,所以我倾向于使用那个。像这样的有用标记有很多,请参阅:help mark-motions
。
对于其他一些动作(我认为不是 2j),还有可以让您在多个动作之间来回导航的跳转列表。 CtrlO 和 CtrlI 执行此导航,但有关详细信息,请参阅 :help jump-motions
。
您还可以使用 g;
和 g,
在您以前的编辑位置列表中前后移动。
在非美式键盘上
在我的瑞士和德国键盘布局中,不方便地键入 ;
需要使用 Shift 键。因此,我将 g-
定义为 $MYVIMRC
中 g;
的更方便的别名:
" Map g- as an alias for g;
nnoremap g- g;
为什么没有人发现 DrAl's answer 的问题? '' 或 `` 并不能解决本帖的原问题!这两个命令不适用于像 2j 这样的光标移动,至少对我来说是这样。这会让 vim 的新手更加困惑。
'' 或 `` 和 CtrlI 或 CtrlO 的行为基于跳转列表。 2j 不会将位置更改保存到跳转列表中,因此这些命令不适用于 2j。
'' 或 `` 在最后位置和当前位置之间切换。 CtrlI 和 CtrlO 处理跳转列表历史。
G; g,移动编辑位置,这也是非常常用的。
2j
这样的情况,什么会起作用?
直接来自帮助(:help jump):
:ju[mps] 打印跳转列表(不是运动命令)。 {Vi 无此功能} {没有 |+jumplist| 才可用|功能} *jumplist* 跳转被记住在跳转列表中。使用 CTRL-O 和 CTRL-I 命令,您可以转到旧跳转之前的光标位置,然后再返回。因此,您可以在列表中上下移动。每个窗口都有一个单独的跳转列表。最大条目数固定为 100。{如果没有 |+jumplist| 则不可用|特征}
j
两次(现在我在第 3 行),然后按双反引号到达第 1 行我希望它移动到第 2 行。i j k l
移动之外的任何运动命令。 (帮助文档中的完整列表是"'"', "`", "G", "/", "?", n", "N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", H" and the commands that start editing a new file
。)所以不,这不会“撤消”2j
或类似的东西,但它几乎适用于其他所有内容。这是有道理的,因为2j
等人。已经有简单的反转(2k
等),而其他的则没有。