文字列を検索し、最初の文字列に含まれていた 2 番目の文字列に置き換えたい。たとえば、次の行があります
key1: foo
key2: bar
この行を私が望む方法で一致させる私の正規表現は次のとおりです。
^\s\+\w:.\+
行全体を次のようなものに置き換えたい:
foo -> key1
bar -> key2
どうすればいいですか?
Vim は\1 \2
etc を後方参照として使用するため、以下を使用できるはずです。
:%s/^\s\+\(\w\+\): \(\w\+\)/\2 -> \1/g
壊す:
^\s\+
: 文字列の先頭にある 1 つ以上のスペース。*
ゼロの可能性がある場合に使用\(\w\+\)
: 単語文字のグループをキャプチャします\1
:
リテラルコロンとスペース\(\w\+\)
: 2 番目のペアの別のキャプチャ グループ/\2 -> \1/
後方参照への置き換え。先頭の空白を削除し、2 つのグループを入れ替えます(これは\v
非常に魔法のバージョンで、見栄えが良く、大量のメタキャラクターのエスケープを回避します):
:%s/\v\s+(\w+): (\w+)/\2 -> \1/g
代用の代用
:%norm <<dWA -> ^]pbD
^]
を押すと得られるメモ<c-v><esc>