ビジュアルセレクト+ヤンクを使用して3つの文字 "foo"をクリップボードにヤンクしたとしましょう。つまり、「vllly」
次に、5行目の別の文字(この文字をxと呼びます)にカーソルを移動しました。これを、以前にヤンクしたもの、つまりfooに置き換えます。
'p'を使用してfooをxの後に貼り付けるか、 'P'を使用してfooをxの前に貼り付けることができますが、replace xをfooに置き換えます。
'vp'を使用してxをfooに置き換えることができますが、これは一度しか機能しません。クリップボードにxが残っているためです。言い換えると、xの次の出現に移動して再度vpを押しても、fooに置き換えられません。
確かに、私は:s/x/foo/gcを使用して検索/置換を行い、置換したくないxのすべての出現を無視することができますが、これは特に私が必要なすべての場合に入力するのは少し面倒ですdoは、カーソルに非常に近いが同じ行にないxの2回または3回の出現を置換します(つまり、行2、3および7)。
だから私は現在:2,7s/x/foo/gcを使用していますが、カーソルをxに移動して[ここに魔法のボタンを挿入]を押してfooに置き換える方法はあるのでしょうか。次に、xの次の出現に移動し、[マジックボタン]をもう一度押してブームします。xは再びfooに置き換えられます。
このアナロジーを使用するのは大変ですが、メモ帳で入力していて、3文字を選択し、Ctrl + cを押してクリップボードにコピーし、xをハイライト表示してからCtrl + vを押して置き換えます。 foo。次に、別のxを強調表示し、Ctrl + vをもう一度押します。
Vimでこれを行うにはどうすればよいですか?
s<C-r>0
についてはどうですか、これは.
で繰り返すことができます
s
は、カーソルの下の文字を削除して、挿入モードにします。<C-r>0
は、レジスター0を挿入します。これは、ヤンクされたテキストを保持します。s
を使用して手動でfoo
を入力することもできます。これは.
でも繰り返すことができます
0レジスタからv"0p
で貼り付けます。
「foo」を別のレジスタにコピーします。登録する:
「そう
次に、「foo」に置き換える文字を視覚的に選択し、
「aP
私はこれが頻繁に必要なので、そのためのプラグインを作成しました: ReplaceWithRegister 。
このプラグインは、{motion}、行全体、または現在の選択によってカバーされるテキストをレジスターの内容で置き換える2つのインgr
コマンドを提供します。古いテキストがブラックホールレジスタに削除されます。つまり、テキストは消えます。
これは理想的とは言えませんが、名前付きバッファa
にヤンクする場合(たとえば、"ay
でヤンクする)、x"aP
を使用できます。お気に入りのマップを使用して、単一のキーストロークにします。