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