【问题标题】:Vim: Move cursor to its last positionVim:将光标移动到最后一个位置
【发布时间】:2011-06-30 10:33:31
【问题描述】:

是否可以在 (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)来回到第一个位置,也可能回到以前的位置。

【问题讨论】:

    标签: vim


    【解决方案1】:

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

    在非美国键盘上

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

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

    【讨论】:

    • 虽然我很喜欢这个,但它只会在一个文件的更改之间跳转。如果你编辑缓冲区 1,然后编辑缓冲区 2,它不会跳回缓冲区 1。
    【解决方案2】:

    为什么没有人发现DrAl's answer 的问题? ''`` 并不能解决本帖的原问题! 这两个命令不适用于像 2j 这样的光标移动,至少对我来说是这样。这会让 vim 的新手更加困惑。

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

    ''`` 在最后位置和当前位置之间切换。 CtrlICtrlO 处理跳转列表历史记录。

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

    【讨论】:

    • 感谢您指出这一点!我想知道,对于像2j 这样的情况,什么会起作用?
    • 感谢@ZhaoGang,这正是我要找的!
    【解决方案3】:

    最快的方法是点击:

    ''

    (两个撇号)或:

    ``

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

    对于其他一些动作(我认为不是 2j),还有可以让您在多个动作之间来回导航的跳转列表。 CtrlOCtrlI 执行此导航,但请参阅:help jump-motions 了解更多信息。

    【讨论】:

    • 实际上没有一个表现完全符合我的预期,但我想没有其他可用的了。
    • @Idan K - ``(双反引号)怎么没有给你你想要的? (“历史”方面除外)。
    • @Dan:如果我在上面的示例中尝试,那么我会看到这种行为:我站在第 1 行,然后连续按两次j(现在我在第 3 行)然后按双反引号会到达第 1 行,我希望它会移动到第 2 行。
    • 我认为你必须移动(2j 或其他东西),然后编辑(或进行任何操作来修改文本)然后使用 '' 移回之前的位置。使用 "2j" 是不合逻辑的,什么都不做,回到之前的位置
    • @IdanK 只有当您使用实际的“跳转”时才会更新跳转列表(即记录上一个光标位置),这(我认为)是除i j k l 移动之外的任何运动命令。 (来自帮助文档的完整列表是"'"', "`", "G", "/", "?", n", "N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", H" and the commands that start editing a new file。)所以不,这不会“撤消”2j 或类似的东西,但它几乎适用于其他所有东西。这是有道理的,因为2j 等人。已经有简单的反转(2k 等),而其他的则没有。
    【解决方案4】:

    直接来自帮助(:help jump):

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

                              *jumplist*
    

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

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 1970-01-01
      • 2014-01-06
      • 2013-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多