使用正则表达式进行Vim搜索

Bri*_*ian 24 regex vim

我想搜索以"abc"开头并以vim中的"xyz"结尾的字符串.

以下是我尝试过的命令:

:1,$g/abc[\w\W]*xyz/
:1,$g/abc\[\\w\\W\]\*xyz/
:1,$g/abc*xyz/
Run Code Online (Sandbox Code Playgroud)

"[\ w\W]*"表示"abc"和"xyz"之间的文本可以是任何字符

"1,$"表示搜索范围是由vim打开的文件中的第1行到最后一行.

我发现了搜索模式

abc[\w\W]*xyz 
Run Code Online (Sandbox Code Playgroud)

适用于https://regex101.com/

为什么它在vim中失败?

rom*_*inl 25

除非"任何字符"对你来说意味着与Vim不同,否则下面的命令应该有效:

:g/abc.*xyz
Run Code Online (Sandbox Code Playgroud)
  • . 意思是"除了EOL之外的任何角色".
  • * 表示"前一个原子的任何数字(包括0)".
  • 1,$可以缩短为%.
  • :global默认情况下,它可以在整个缓冲区上运行,因此您甚至不需要%.
  • /如果您没有按照:g/pattern命令执行操作,则不需要关闭:g/foo/d.


Bri*_*ian 6

一旦文件变得太大(比如 1GB),":g/abc.*xyz" 就会变得很慢。

我找到

cat fileName | grep abc | grep xyz >> searchResult.txt
Run Code Online (Sandbox Code Playgroud)

比在 vim 中使用搜索功能更有效。

我知道此方法可能会返回以“xyz”开头并以“abc”结尾的行。

但是由于这在我的文件中是很少见的情况(也许其他人不会经常发生这种情况),我想我应该在这里写这个方法。