簡體   English   中英

vim:用行的第一個單詞替換單詞

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM