Vim:将光标移动到其最后位置

Vim:将光标移动到其最后位置,vim,Vim,在(g)Vim中是否可以将光标移动到其先前位置(在正常模式下)?在以前的光标位置列表中来回循环的东西将是理想的。但是,只要切换到最后一个位置就足够了(类似于bash中带有目录的cd-) 下面是一个小演示: line |1| <- cursor position line 2 line 3 line 4 现在我想按一些键(显然不是2k)返回到第一个位置,也可能返回到以前的位置。最快的方法是按下以下任一键: '' (两个撇号)或: `` (两次回击)。请注意,不同之处在于反勾号位于行的同一位

在(g)Vim中是否可以将光标移动到其先前位置(在正常模式下)?在以前的光标位置列表中来回循环的东西将是理想的。但是,只要切换到最后一个位置就足够了(类似于bash中带有目录的
cd-

下面是一个小演示:

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

现在我想按一些键(显然不是
2k
)返回到第一个位置,也可能返回到以前的位置。

最快的方法是按下以下任一键:

''

(两个撇号)或:

``

(两次回击)。请注意,不同之处在于反勾号位于行的同一位置,而撇号位于行的开头。在英国键盘上,撇号更容易使用,所以我倾向于使用那个。有很多这样的有用标记,请参见
:help mark motions

对于其他一些动作(我想不是2j),还有一个跳转列表,可以让你在许多动作中来回导航。CtrlO和CtrlI执行此导航,但有关更多信息,请参见
:帮助跳跃动作。

从帮助(:帮助跳跃):

:ju[mps]打印跳转列表(不是运动命令)。{不在 Vi}{没有|+jumplist |功能时不可用}

                          *jumplist*
跳转在跳转列表中被记住。使用CTRL-O和CTRL-I命令 可以在较旧的跳跃之前转到光标位置,然后再返回。这样你就可以 在列表中上下移动。每个窗口都有一个单独的跳转列表。 最大条目数固定为100。 {没有|+jumplist |功能时不可用}

                          *jumplist*

您也可以使用
g
g,
在以前的编辑位置列表中前后移动

在非美国键盘上 在我的瑞士和德国键盘布局上,键入
不方便地需要使用Shift键。因此,我将
g-
定义为
g更方便的别名
$MYVIMRC
中:

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

为什么没有人发现这个问题? “”或``不能解决此帖子的原始问题! 这两个命令对某些光标移动(如2j)不起作用,至少对我来说是这样。这会让vim的新手更加困惑

“”或``以及CtrlI或CtrlO的行为基于跳转列表。2j不会将位置更改保存到跳转列表中,因此这些命令对2j不起作用

“”或``在最后一个位置和当前位置之间切换。 CtrlI和CtrlO处理跳转列表历史记录


g;和g,移动到编辑位置,这也是非常常用的。实际上,这些位置的行为都与我期望的不完全一样,但我猜没有其他可用的位置。@Idan K-为什么“`”(双倒勾)不能完全满足您的需要?(除了“历史”方面)。@Dan:如果我在上面的例子中尝试,那么我会看到这样的行为:我站在第1行,然后连续按两次
j
(现在我在第3行),然后按双反勾到达我的第1行,我希望它移动到第2行。我想你必须移动(2j或其他),然后编辑(或执行任何修改文本的操作)然后使用“”移回上一个位置。使用“2j”,不执行任何操作而返回上一个位置是不符合逻辑的position@IdanK只有在使用实际的“跳转”时,才会更新跳转列表(即记录上一个光标位置),即(我认为)除了
i j k l
运动以外的任何运动命令。(帮助文档中的完整列表是
“'”、“'、“/”、“?”、n”、“n”、“%”、“(“,”)、“[”、“]]、“{”、“}”、“:s”、“:tag”、“l”、“M”、“H”以及开始编辑新文件的命令)
,因此,这不会“撤消”
2j
或类似,但它几乎适用于所有其他情况。这是有意义的,因为
2j
等已经有了简单的反转(
2k
等),而其他人则没有。感谢您指出这一点!我想知道,对于像
2j
这样的情况,什么会起作用呢?虽然我非常喜欢这个,但它只会在一个文件中的更改之间跳转。如果您编辑缓冲区1,然后编辑缓冲区2,它不会跳回缓冲区1。