web-dev-qa-db-ja.com

vim:カーソルの下の文字を、以前にヤンクしたテキスト(複数回)に置き換えるにはどうすればよいですか?

ビジュアルセレクト+ヤンクを使用して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でこれを行うにはどうすればよいですか?

26
Kosta Kontos

s<C-r>0についてはどうですか、これは.で繰り返すことができます

  • sは、カーソルの下の文字を削除して、挿入モードにします。
  • <C-r>0は、レジスター0を挿入します。これは、ヤンクされたテキストを保持します。

sを使用して手動でfooを入力することもできます。これは.でも繰り返すことができます

43
Stefan

0レジスタからv"0pで貼り付けます。

7
Raimondi

「foo」を別のレジスタにコピーします。登録する:

「そう

次に、「foo」に置き換える文字を視覚的に選択し、

「aP

2
Habi

私はこれが頻繁に必要なので、そのためのプラグインを作成しました: ReplaceWithRegister

このプラグインは、{motion}、行全体、または現在の選択によってカバーされるテキストをレジスターの内容で置き換える2つのインgrコマンドを提供します。古いテキストがブラックホールレジスタに削除されます。つまり、テキストは消えます。

0
Ingo Karkat

これは理想的とは言えませんが、名前付きバッファaにヤンクする場合(たとえば、"ayでヤンクする)、x"aPを使用できます。お気に入りのマップを使用して、単一のキーストロークにします。

0
William Pursell