Vim
VIM 替換一行中特定單詞後出現的模式
我的文字中有這樣的台詞。
模式之前的文本 = 垃圾** 模式之後的文本是模式
如果在 VIM 中我這樣做
%s/pattern/saturn/
,它會替換所有出現的pattern
. 但我只想替換之後出現的那些=
。它應該忽略之前出現的行中的所有內容=
。怎麼做?
您可以使用特殊原子在之前
\@<=
斷言匹配(使其在該行之前的任何位置):=.*
:%s/\(=.*\)\@<=pattern/saturn/g
假設您只有一次
pattern
before=
,您可以分兩步執行此操作::%s/pattern/saturn/g :%s/saturn\(.\{-}=\)/pattern\1/
\{-}
指示惰性匹配(.
也稱為非貪婪)。解釋
第一步用下一步替換所有出現的
pattern
,然後查找之前saturn
的單詞並將其替換為。saturn``=``pattern
警告
這假設
=
每行出現一次。更好的方法(僅假設
=
每行一個)您可以使用遞歸宏來做到這一點:
qaqqa:%s/\(=.\{-}\)pattern/\1saturn/@aq@a
這用替換了一次出現的
pattern
after 。當儲存為宏並遞歸呼叫時,它將繼續處理文件,直到沒有任何東西可以替代。這是hackish,但它的工作原理。=``saturn
也可以看看