1. ホーム
  2. vim

[解決済み] 単語をペーストバッファの内容で置き換える?

2022-05-15 15:32:13

質問

ファイル内の単語の置換を大量に行う必要があり、次のような EX コマンドではなく vi コマンドで行いたいのですが、どうすればよいでしょうか。 :%s///g .

私は、これが現在のカーソル位置の単語を置き換える典型的な方法であることを知っています。 cw<text><esc> というように、現在のカーソル位置の単語を置き換える典型的な方法ですが、無名レジスタの内容を置換テキストとして、レジスタを上書きせずにこれを行う方法はあるでしょうか?

どのように解決するのですか?

paste"というのは、無名(yank/put/change/delete/substitute)レジスタのことではないでしょうか?(changeコマンドで上書きされるのはこれなので)。

レジスタの指定は、一般に " のように,レジスタの名前(1文字)を入力します。 "ay 次に "ap をクリックすると、登録されます。 a の内容をレジスタ a . 変更コマンドの場合も同じです。この場合、変更コマンドで削除したテキストがどこにも行かないようにしたい場合は、ブラックホールレジスタの "_ : "_cw . そして、挿入モードになったら、ctrl-R の後に希望のレジスタを押します(おそらく " を入力すると、そのレジスタの内容が挿入されます。

  • "* - 選択レジスタ(中ボタンペースト)
  • "+ - クリップボード登録 (おそらくターミナルから ctrl-shift-v でもアクセス可能)
  • "" - vim のデフォルトの (名前のない) yank/put/change/delete/substitute レジスタです。

短い答えです。 "_cw^R"

編集:他の人が提案しているように、もちろん、あなたのテキストをデフォルトのレジスタに入れたヤンク(または何か)に別のレジスタを使うことができます。しかし、いつも最初にそれを考えるとは限らないので、吹き飛ばされることなく単一の変更コマンドを実行するのはいいことです。とはいえ、完全に吹っ飛んでしまうわけではありません。番号付きのレジスターがあります "0 を通して "9 :

Vim は yank と delete コマンドのテキストでこれらのレジスタを埋めます。

番号付きレジスタ 0 は、コマンドが ["x] で別のレジスタを指定しない限り、最も新しい yank コマンドからのテキストを含みます。

番号付きレジスタ 1 は、コマンドが別のレジスタを指定しない限り、またはテキストが 1 行未満でない限り、最も最近の delete または change コマンドによって削除されたテキストを含みます (小さな delete レジスタがそのとき使用されます)。 これらの移動コマンドでは、delete 演算子は例外となります。 % , ( , ) , ` , / , ? , n , N , {} . このとき、常に "1 レジスタが使用されます (これは Vi 互換です)。 行内で削除する場合は、"- レジスタも同様に使用されます。

削除や変更を繰り返すたびに、Vim はレジスタ 1 の以前の内容をレジスタ 2 に、2 を 3 に、...とシフトし、レジスタ 9 の以前の内容を失くしていきます。 レジスタ 9 の以前の内容は失われます。