[英]vim: replace word with first word of line
問題
我有一個看起來像這樣的文件:
word =一些東西aaa一些東西aaa
word2 =某些東西aaa某些東西aaa
word3 =某事aaa某事aaa
請注意,“某物”不一定到處都是相同的詞。 同樣,“某物”和“ aaa”也不必用空格隔開。
題
我想用vim中該行的第一個單詞替換所有出現的“ aaa”。 輸出應如下所示:
word =某物某物某物某物
word2 =一些東西word2一些東西word2
word3 =一些東西word3一些東西word3
到目前為止,我主要研究了vim的搜索和替換語法,因為這是我最熟悉的。
謝謝您的幫助!
這個:s
命令適用於您的示例:
%s/\<aaa\>/\=substitute(getline('.'),'^[^=]*\zs=.*','','')/g
對於完全使用正則表達式的解決方案,我建議這樣做:
:%s/\v%(^([^=]+).*)@<=aaa/\1/g
這可以使后面的寬度( \\@<=
)具有零寬度。 正則表達式開始處的\\v
只是通過啟用“非常魔術”模式來簡化轉義(請參閱:h \\v
)。 表達式本身:
%(^([^=]+).*)@<=aaa
后面的樣子與第一組一起運行。 %()
形式是一個非捕獲組(快一點,並且不會在替換中計為數字)。 內部組捕獲不等號的任何內容,並且在該組之后,所有內容都匹配( .*
)。 所有這些都不在正則表達式中計算,真正匹配的是aaa
,但是只有在這些條件之后才匹配。 當然,它們先於它們,但目標是捕獲第一個單詞。
然后,此aaa
被捕獲的組替換,在一行( g
標志)和所有行( %
范圍)中多次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.