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

相關內容