Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search Vim:在另一个模式的匹配之后搜索第一个匹配_Search_Vim - Fatal编程技术网

Search Vim:在另一个模式的匹配之后搜索第一个匹配

Search Vim:在另一个模式的匹配之后搜索第一个匹配,search,vim,Search,Vim,如何使用Vim中的一个命令/搜索模式在下一次出现Foo之后找到第一次出现的bar Ex:假设我有如下文本: 酒吧,酒吧,酒吧,我真是个野蛮人 福:那家酒吧供应德国啤酒 酒吧酒吧酒吧酒吧,这么多酒吧 福:不相关 …布拉 但是接下来的栏 我如何在粗体的栏之间跳转?我还没有想出一种方法来组合以下两种方法,但它们独立地回答您的两个请求 如何使用一个命令找到第一个匹配项::norm/Foo^M/bar^M 如果未直接键入^M,则必须按ctrl(或者在我的情况下按ctrl+shift),然后按v,然后按M

如何使用Vim中的一个命令/搜索模式在下一次出现
Foo
之后找到第一次出现的
bar

Ex:假设我有如下文本:

酒吧,酒吧,酒吧,我真是个野蛮人

福:那家酒吧供应德国啤酒

酒吧酒吧酒吧酒吧,这么多酒吧

福:不相关

…布拉

但是接下来的


我如何在粗体的栏之间跳转?

我还没有想出一种方法来组合以下两种方法,但它们独立地回答您的两个请求

  • 如何使用一个命令找到第一个匹配项:
    :norm/Foo^M/bar^M
    如果未直接键入
    ^M
    ,则必须按
    ctrl
    (或者在我的情况下按
    ctrl+shift
    ),然后按
    v
    ,然后按
    M
    ^M
    表示“输入/返回”按钮,因此您基本上在一行中执行两个单独的搜索。因为它们是分开的,所以执行
    n
    n
    向前或向后移动只能在
    bar
    之间向前和向后移动,无论它们是否位于
    Foo
    之后。这导致:
  • 如何移动到
    Foo
    之后的下一个
    。可以通过录制宏来实现这一点。按
    q
    然后按存储宏的字母开始录制,然后可以执行
    /Foo
    搜索,然后执行
    /bar
    搜索。再次按
    q
    停止录制。现在您只需执行
    @a
    ,其中
    a
    是您选择的字母,这将使您在下一个
    Foo
    之后进入下一个
    栏。您可以重复该命令以继续向前搜索,也可以创建另一个宏以向后搜索

  • 我还没有找到一种方法来结合以下两种方法,但它们会独立地回答您的两个请求

  • 如何使用一个命令找到第一个匹配项:
    :norm/Foo^M/bar^M
    如果未直接键入
    ^M
    ,则必须按
    ctrl
    (或者在我的情况下按
    ctrl+shift
    ),然后按
    v
    ,然后按
    M
    ^M
    表示“输入/返回”按钮,因此您基本上在一行中执行两个单独的搜索。因为它们是分开的,所以执行
    n
    n
    向前或向后移动只能在
    bar
    之间向前和向后移动,无论它们是否位于
    Foo
    之后。这导致:
  • 如何移动到
    Foo
    之后的下一个
    。可以通过录制宏来实现这一点。按
    q
    然后按存储宏的字母开始录制,然后可以执行
    /Foo
    搜索,然后执行
    /bar
    搜索。再次按
    q
    停止录制。现在您只需执行
    @a
    ,其中
    a
    是您选择的字母,这将使您在下一个
    Foo
    之后进入下一个
    栏。您可以重复该命令以继续向前搜索,也可以创建另一个宏以向后搜索
  • 想到的第一种方法(简单但不可重复) 您可以这样做:

    /Foo/;/bar
    
    但是“最后一个模式”将是
    条形
    ,因此这在
    n
    n
    等情况下是不可重复的。这意味着您必须先执行一次,然后再执行
    /
    ,这可能满足您的需要,也可能不满足您的需要

    请注意,一旦跳转到第二个匹配,可以执行
    `
    跳回第一个匹配,执行
    `
    跳回第二个匹配,依此类推

    请参阅
    :帮助:
    :帮助`

    想到的第二种方法(更复杂但可重复) 对于单个模式,因此可重复使用
    n
    n
    等,您可以执行以下操作:

    /Foo\_.\{-}\zsbar
    
    在哪里

    • /Foo
      匹配下一个
      Foo
    • \\.{-}
      匹配任何字符,包括EOL,尽可能少
    • \zs
      开始实际匹配,丢弃之前的内容
    • 我们想要的是
      bar
    第一个想到的方法是参见
    :help\.
    :help\{
    ,和
    :help\zs

    (简单但不可重复) 您可以这样做:

    /Foo/;/bar
    
    但是“最后一个模式”将是
    条形
    ,因此这在
    n
    n
    等情况下是不可重复的。这意味着您必须先执行一次,然后再执行
    /
    ,这可能满足您的需要,也可能不满足您的需要

    请注意,一旦跳转到第二个匹配,可以执行
    `
    跳回第一个匹配,执行
    `
    跳回第二个匹配,依此类推

    请参阅
    :帮助:;
    :帮助`

    想到的第二种方法(更复杂但可重复) 对于单个模式,因此可重复使用
    n
    n
    等,您可以执行以下操作:

    /Foo\_.\{-}\zsbar
    
    在哪里

    • /Foo
      匹配下一个
      Foo
    • \\.{-}
      匹配任何字符,包括EOL,尽可能少
    • \zs
      开始实际匹配,丢弃之前的内容
    • 我们想要的是
      bar

    请参见
    :help\\.
    :help\{/code>,和
    :help\zs
    ,谢谢!这些都是我的想法,但我有些模糊的记忆,我曾在某处看到过它的直接命令…谢谢!这些是我的想法,但我有些模糊的记忆,我曾在某处看到过它的直接命令。。。