現在、貼り付けバッファを使用してVimで「単語を変更する」方法は?

現在、貼り付けバッファを使用してVimで「単語を変更する」方法は?

貼り付けバッファにいくつかのテキストがあります。たとえば、yw(単語の取り出し)を実行しましたが、バッファに「foo」があります。

それでは、「bar」という言葉に移動してそれを貼り付けバッファに置き換えたいと思います。

テキストを手動で置き換えるには、これを実行してcwから新しい単語を入力します。

「単語の変更」を実行しますが、代替単語を手動で入力するのではなく、貼り付けバッファの内容を使用するにはどうすればよいですか?

今最善の選択肢は、変更したい単語の先頭に行って実行dw(単語を削除)し、別の場所に移動して実行yw(単語を取得)することです。次に、交換領域に戻りp(貼り付け)操作を実行します。これは、特に同じ画面にない場合はやや厄介です。

答え1

オプション1

レジスタを使用してこれを実行し、プロセスのキーバインディングを作成できます。

変更したい単語を取り出してくださいyw

インポートされた単語は、0発行して表示できるレジスタにあります:registers

変更したい単語に行き、それをしてくださいcwCtrl+タスクを実行しrてからレジスタを0貼り付けます。0

マッピングは次のとおりです(Ctrl+をjキーの組み合わせとします)。

:map <C-j> cw<C-r>0<ESC>

オプション2(簡単)

単語を取り出したら、変更したい単語にカーソルを置いて実行しますviwp。視覚的に内部の単語を選択して貼り付けることです。

コメント中の@tloに感謝します。あなたもこれを行うことができますvep。一文字短いです。欠点は、単語の先頭にカーソルを置いて(私のように)バッファを変更する必要があることです。

コメント(Michael):

これはいいですね。追加の注:2番目の方法は実際には簡単ですが、交換するたびにバッファが置き換えられるフィールド(前のテキスト)に変更されるため、1回の交換でのみ機能します。最初の方法は使用するのが少し難しいですが、バッファ0が「そのまま」維持されるという利点があるため、この方法を使用して同じテキストを複数回置き換えることができます。

答え2

ビームの道方法を学ぶことです意図的にヤンク、削除、その他のレジスタを使用してください。これがわかったら、これを行うための独自のキーシーケンスを簡単に見つけることができます。

レジスタは"0ヤンクレジスタです。プルされるすべての項目はここに移動されますが、削除または変更はレジスタには届きません"0

だからあなたの例では、単語を1つ引いた。インポートした単語に単語を置き換えるには、インポートしたレジスタに触れない削除操作を利用できます。ターゲットワードに移動し、それを使用して削除するか、コピーdwレジスタから貼り付ける方が良い(繰り返し可能)。"0pcw^R0

コピーレジスタの反対側には小さな消去レジスタがあります"-。小さな削除や変更はここに保存されますが、引っ張っても決して触れません"-。削除量が行全体より少ない場合は、小規模削除と見なされます。

登録"1-"9大規模な削除履歴登録です。最新の大規模削除または変更削除を含み、"1最も"9古い大規模削除または変更削除を含みます。小さくない削除(たとえば、行全体または複数行の削除など)"1のみにプッシュされます"9

レジスタを変更する操作の場合、コピーは常に名前のないレジスタとも呼ばれる基本レジスタに配置されます""。これは、レジスタ名を明示的に指定しない場合に使用されるレジスタです。

レジスタ"_はブラックホールレジスタなので常に空です。これを削除すると、基本""レジスタやブラックホールレジスタ自体を含め、どのレジスタのどれも変更されません。削除されたテキストは元に戻す履歴を除いて完全に消えました。ブラックホールレジスタからプルまたはペーストすることは基本的に何もしません。

ブラックホールレジスタを使用すると、最初の小さな削除を実行し、小さな削除レジスタを変更せずに他の多くの削除を入れてから、最初の小さな"_削除を貼り付けるなどの操作を実行できます。"_"-

あなたはおそらくレジスターである一般的な名前付きレジスターにすでに慣れているでしょう。"aそして"zこれをスクラッチ空間として勝手に使えます。"A名前付きレジスタを大文字で参照する場合は、"Zその内容を置き換えるのではなく追加することです。

他のレジスタは、最後に挿入されたレジスタ".、ファイル名レジスタ"%"#コマンドレジスタ":、検索レジスタ"/、および式レジスタです"=

コマンドを使用して、これらすべてのレジスタとその内容のリストを取得できます:register。このコマンドはレジスタの現在の内容を表示するので、結果がどこにあるかを実験して理解するのに役立ちます。

答え3

yw単語を取り出し、置換したい単語にカーソルを移動し、それを削除するために使用してテキストを空のレジスタに送信します"_dw"デフォルトでは登録)を入力してくださいp

次のマッピングを使用すると、タスクをより簡単に作成できます。

nnoremap <leader>d "_d

...これにより、通常モードではレジスタ\dwに影響を与えずに単語を削除できます。"

答え4

この機能があまりにも頻繁に必要であるため、これを簡素化し、最大速度を可能にするプラグインを作成しました。レジスタと交換

プラグインは、gr{モーション}/テキストオブジェクト、全行、または現在の選択に含まれるテキストをレジスタの内容に置き換える2-in-1コマンドを提供します。前のテキストはブラックホールレジスタから削除されます。つまり、消える。多くのエッジケースを透過的に処理し、.標準コマンドを使用して迅速な繰り返しを可能にします。気に入らない場合は、そのページに代替案へのリンクがあります。

関連情報