VIM在您键入时看到正则表达式匹配


8

如果键入,/regex则光标会暂时跳到第一个匹配项,并且所有匹配项都将突出显示。随我键入而更新。当我准备进行替换时,是否有可能出现这种现象?例如,当我处理一个复杂的正则表达式时:%s/\<regex\>/,我想知道什么匹配,然后再扣动触发器并更改所有内容。有办法吗?


如果它可以与搜索一起工作,那就很好:突出显示当前匹配的内容。您找到最佳方法了吗?
安东·丹尼科

Answers:


12

首先使用/(或)输入搜索内容,这将使您可以调整正则表达式(因为您使用的是incsearch)

一旦一切都很好,您就可以在替代命令中使用上一个搜索模式(您刚刚使用的模式),即为“搜索”项使用两个分隔符:

/elephant                       " find the next elephant
:%s//rhino/gc                   " make then all rhinos!

当然,您可以照常使用选择和范围。

:1,15s,,cougar,g
:'<,'>s::tiger:

+1教我有关s//
史蒂文·卢

2

一种选择是您可以具有确认标志c

:%s;regex;replacement;gc

:h s_flags

[c] Confirm each substitution.  Vim highlights the matching string.  You can type:              
        'y'     to substitute this match
        'l'     to substitute this match and then quit ("last")
        'n'     to skip this match
        <Esc>   to quit substituting
        'a'     to substitute this and all remaining matches
        'q'     to quit substituting

您也可以尝试使用grep命令查看过滤的输出和突出显示的原始文件。

:g/re/p 要么 :g/re/


我喜欢它,但仍然需要我先完成正则表达式,然后才能查看是否匹配任何内容。
约翰·贝里曼

0

好吧,查看正则表达式将匹配的简短方法是/使用所需的正则表达式进行搜索。它将跳至第一个匹配项并在您键入时将其标记出来。试试吧- vim不会令您失望。


是的,尽管那是我在问题中所说的。我希望它会随着我准备替代的更新而更新。对于您的解决方案,我必须尝试使用​​正则表达式,然后将其复制(如何?),然后在替换中使用它。这还不够好。
约翰·贝里曼
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.