3

ファイルがある場合:

aaa / new replacement line
AAA / old target line
random line
random line 
BBB / old target line
CCC / old target line

この例では 4 つの置換があるため、最終的なファイルは次のようになります。

aaa / new replacement line
aaa / new replacement line
random line
random line 
aaa / new replacement line
aaa / new replacement line

以下の回答を試みていますが、これについてもご意見をお聞かせください。私が気付いていない、より成功した「vim ゴルフ」アプローチがあるかもしれません。多分私は本当にばかげているだけで、これには簡単なコマンドがあります。

基本的に、問題は次のとおりです。行をレジスタにヤンクした場合、「古いターゲット行」に一致する検索行を完全に置き換えるにはどうすればよいですか?

4

2 に答える 2

6

置換行をヤンクするために使用0y$します - これには改行は含まれません。

次に使用します。

%s/.*old target line.*/\=@"

unnamedターゲット行を、最後のヤンクを含むレジスタの内容に置き換える。

于 2012-07-09T22:22:17.073 に答える
0

最初に を使用して「aaa / 新しい置換行」を取得し、"aYレジスタに保存します

次に、次を使用してキャリッジ リターンを削除します。 from remove newlines from a register in vim? :

:let @a=substitute(strtrans(@a),'\^@',' ','g')

または、単純に視覚的な選択を使用しvて、リターンなしで行を取得することもできます (これははるかに簡単です)。

その後、グローバル コマンドを使用して置換を実行できます。

:g/old target line/s/.*/\=@a
于 2012-07-09T22:09:17.473 に答える