【问题标题】:In vim, how do I go back to where I was before a search?在 vim 中,我如何回到搜索前的位置?
【发布时间】:2010-09-08 09:49:14
【问题描述】:

在 vim 中编程我经常去搜索一些东西,拉取它,然后回到原来的位置,插入它,修改它。

问题是,在我搜索并找到之后,我需要手动找到回到原来位置的路。

是否有自动返回到我上次搜索时的位置的方法?

【问题讨论】:

标签: vim vi


【解决方案1】:

我总是通过设置标记来完成。

  1. 在命令模式下,按 m[字母]。例如,ma 使用 a 作为标记标识符在当前行设置标记。

  2. 要返回标记,请按 ' [字母]。例如,'a 将带您回到步骤 1 中设置的行标记。要返回标记行的行的列位置,请使用 `a反引号[字母])。

要查看当前设置的所有标记,请输入 :marks


在一个稍微不相关的笔记上,我刚刚发现了另一个关于标记的好东西。

假设您通过执行 mb 跳转到标记 b。 Vim 自动将标记 ' (即单引号)设置为您在跳转到标记 b 之前所在的那一行。

这意味着您可以执行 'b 跳转到该标记,然后执行 ''(2 个单引号)跳转回到你以前的任何地方。

我使用:marks 命令意外发现了这一点,该命令显示了所有标记的列表。

【讨论】:

  • 幸运的是,通常不需要标记,因为 vim 会特别跟踪某些位置,并允许您使用 ``、^O 等访问它们。
  • 该标记似乎只将我带到设置它的行的开头。 ):
  • @HermannIngjaldsson 你现在可能已经想通了,但是使用 ' 会带你到标记的线,` 会带你到确切的位置。
【解决方案2】:

使用`` 跳转回您搜索/跳转之前所在的确切位置,或使用'' 跳转回您搜索/跳转之前所在行的开头。

【讨论】:

  • 只有在你参加第一场比赛时才会看到工作,n-ing 到随后的比赛意味着你不会跳回到你开始的地方。
  • 如果您搜索并做出更改会怎样?
  • 你也可以使用g;g,,它转到上一个/下一个变化的位置。
【解决方案3】:

CTRL+OCTRL+I,用于前后跳转。

【讨论】:

    【解决方案4】:

    我用这个:

    nnoremap / ms/
    nnoremap ? ms?
    

    然后,如果我使用/? 搜索某些内容,我可以通过`s 快​​速返回。您可以将字母 s 替换为您喜欢的任何字母。

    【讨论】:

    • 这里唯一需要注意的是,它会破坏在诸如 NerdTree 之类的窗口中的搜索,其中 m 被定义为标记以外的东西,在 NerdTree 的情况下它是菜单。
    【解决方案5】:

    Ctrl+O 将我带到上一个位置。在搜索之前不知道位置。

    编辑:另外,`. 会将您带到您所做的最后更改。

    【讨论】:

    • 似乎按下 CTRL+O 的次数足够多也会让您重新浏览之前打开的文件。
    • Ctrl+O 也是我的首选方法。我经常使用它,并希望其他编辑复制它的行为。
    • 是的,CTRL-O 和 CTRL-我似乎带你在你去过的地方来回走动,很好。
    • Ctrl+T 只会在您使用标签到达那里时带您返回。如果您在不使用标签的情况下搜索它,Ctrl+T 将带您回到您搜索最后一个 tag 之前的位置
    • 我发现如果我跳通过:70然后:100,按一次ctrl+o会回到原来的位置,not第70行。: (
    【解决方案6】:

    你真的应该阅读:help jumplist,它很好地解释了这一切。

    【讨论】:

    • 我最喜欢这个答案, :help 中有很多信息是大多数人不知道的(直到最近我才知道)
    • 多么棒的读物!这非常有帮助。 循环浏览您最近去过的地方。默认情况下跨缓冲区工作:)
    【解决方案7】:

    最简单的方法是设置一个标记,用m[letter],然后用'[letter]返回它

    【讨论】:

    • 当我搜索 vim 技巧时见到你真是一种享受。我一直在使用 ctrl-o 和 ctrl-i,因为它更容易和更自动地来回移动。
    猜你喜欢
    • 2017-03-11
    • 2015-07-17
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2015-01-27
    • 2013-08-20
    相关资源
    最近更新 更多