vim:找到包含不在相邻行中的模式的行

vim:找到包含不在相邻行中的模式的行

我想找到一种方法来显示所有包含特定模式的行,但它的相邻(上一行、下一行)却不显示。

例如:假设模式是单词“PATTERN”

1.###########################

2.#########模式#########

3.##############################

那么第二行有效并显示。

1.###########################

2.#########模式#########

3.#########模式#########

4.##############################

那么第二行和第三行无效,因此不会显示

答案1

您可能想要使用正则表达式捕获组,如下所示:

/\v%(PATTERN.*\n.*)@<!(PATTERN)%(.*\n.*\1)@!

例子

这看上去可能有点吓人,但其实很简单:

  1. \v用于启用“非常神奇”正则表达式(避免对大多数特殊字符使用反斜杠)
  2. PATTERN.*\n.*PATTERN,然后是任意内容,换行符,然后是任意内容
  3. (...)@<!是负面回顾的模式:这意味着我们不想括号内的内容应存在。因此,在我们的例子中,所有步骤2都不应存在
  4. (PATTERN)这是我们实际的单词,它应该存在!我们用括号将其括起来以备将来使用
  5. .*\n.*\1是任何东西,换行符,任何东西,以及我们捕获的组(参见步骤4
  6. %(...)@!是一种负面的前瞻,和以前一样,我们不希望大括号之间的内容存在。

所以基本上,我们想要的PATTERN是:

  • 前面没有包含PATTERN
  • 后面没有包含PATTERN

相关内容