2016-04-06 21 views
2

問題
私は、このようなファイルがあります:=何か何かのaaa何かAAA
WORD2 =何か何かのaaa何かAAA
Vimは:行の最初の単語と単語を置き換え

単語をword3 =何か何かaaa何かaaa

"何か"は必ずしもどこでも同じ単語ではありません。また、「something」と「aaa」は、必ずしも空白で区切られているわけではありません。

質問
私はvimの中の行の最初の単語を「AAA」のすべての出現を交換したいと思います。

単語=何かの何かの単語に何かワード
WORD2何か

は、これまでのところ、私は主に見ているワード3ワード3何かワード2
ワード3 =何かの何かWORD2 =何かの何か:出力は次のようになります。 vimの構文を検索して置き換えます。なぜなら、それが私が最もよく知っているからです。

ありがとうございました!あなたの例のための

答えて

2

は、私がこの提案:

:%s/\v%(^([^=]+).*)@<=aaa/\1/g 

これはゼロ幅を有する(\@<=)の背後にある表情で動作します。 \vの 正規表現の開始は、 "very magic"モード(:h \vを参照)を有効にすることでエスケープを単純化するだけです。式自体:

%(^([^=]+).*)@<=aaa 

ルックバックは最初のグループで動作します。 %()フォームは、 捕捉グループではありません(少し速く、 置換では番号付きのものとしてカウントされません)。内部グループは等号ではないものをキャプチャし、このグループの後に 、何かが一致する(.*)。これらはすべて正規表現の には数えられませんが、実際には一致するのはaaaですが、その前に一致するのは です。もちろん、先行するのは ですが、目標は最初の単語を取得することです。

このaaaは、行(gフラグ) 及び全てのライン(%範囲)で、捕捉基により複数回置換されています。

2

この:sコマンドの機能:完全に正規表現を用いて溶液の場合

%s/\<aaa\>/\=substitute(getline('.'),'^[^=]*\zs=.*','','')/g 
+1

興味深い考えですが、 'substitute()'の代わりに '\ = matchstr(getline( '。')、 '^ [^ =] *')'を使用すると、 – sidyll

関連する問題