118

ファイル内で一連の単語置換を行う必要があり、。などのEXコマンドではなく、viコマンドを使用してそれを実行したいと思います:%s///g

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

4

9 に答える 9

135

「貼り付け」とは、名前のない(ヤンク/プット/変更/削除/置換)レジスタを意味していると思いますよね?(これは change コマンドによって上書きされるためです。)

レジスターは通常、レジスター"の名前 (1 文字) を入力して指定します。たとえば、レジ​​スター"ay"apヤンクしてからa、レジスターの内容を入れますa。変更コマンドについても同様です。この場合、change コマンドで削除したテキストをどこにも移動させたくない場合は、ブラック ホール レジスタ"_: を使用できます"_cw。次に、挿入モードになったら、ctrl-R を押して"から、そのレジスタの内容に入れたいレジスタ (おそらく ) を押します。

  • "*- 選択レジスタ (中ボタンの貼り付け)
  • "+- クリップボード レジスタ (おそらくターミナル経由で ctrl-shift-v でもアクセス可能)
  • ""- vim のデフォルト (名前なし) ヤンク/プット/変更/削除/置換レジスタ。

簡潔な答え:"_cw^R"

編集: 他の人が示唆しているように、もちろん、テキストをデフォルトのレジスタに取得したヤンク (または何でも) に別のレジスタを使用できます。ただし、常に最初にそれを考えるとは限らないため、変更コマンドを吹き飛ばさずに 1 つの変更コマンドを実行すると便利です。それは完全に吹き飛ばされていませんが。から までの番号が付けられたレジスタがあり"0ます"9

Vim はこれらのレジスタに yank コマンドと delete コマンドからのテキストを入力します。

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

番号付きレジスター 1 には、最新の削除または変更コマンドによって削除されたテキストが含まれます。ただし、コマンドが別のレジスターを指定した場合、またはテキストが 1 行未満である場合を除きます (その場合、小さな削除レジスターが使用されます)。%移動コマンド、()`/?nNおよび{の削除演算子は例外です}。その場合、レジスタ "1 が常に使用されます (これは Vi 互換です)。"- レジスタは、削除が行内にある場合にも使用されます。

連続して削除または変更するたびに、Vim はレジスター 1 の以前の内容をレジスター 2 に、2 を 3 に、というようにシフトし、レジスター 9 の以前の内容を失います。

于 2010-03-18T15:56:52.803 に答える
49

この投稿の情報を使用して、この便利なマッピングを作成しました。「貼り付けの変更」を意味するため、「cp」を選択しました

nmap <silent> cp "_cw<C-R>"<Esc>

編集:

また、私はこれをさらに一歩進めて、あらゆる動きをサポートしました。

上記のコマンドと同等のものを取得するにはcpw、「単語の貼り付けを変更」の場合になります

"This allows for change paste motion cp{motion}
nmap <silent> cp :set opfunc=ChangePaste<CR>g@
function! ChangePaste(type, ...)
    silent exe "normal! `[v`]\"_c"
    silent exe "normal! p"
endfunction
于 2011-03-18T19:57:44.510 に答える
32

これには、vim のビジュアル モードを使用できます。たとえば、単語をコピーyeしてから、コピーした単語で別の単語を上書きします。vep

于 2010-08-02T18:48:22.697 に答える
7

名前付きレジスタを使用する場合 (つまり、"ayまたは"adなどを使用して貼り付けレジスタを埋める)、次のようなことができます。

cw<CTRL-R>a<esc>

単語を register の内容に置き換えますa。私が知る限り、デフォルトのレジスタを使用することはできません。cwこれは、そのコマンドによって切り取られた単語が入力されるためです。

于 2010-03-18T15:56:53.460 に答える
2

システム ペースト バッファまたは vi レジスタを意味しますか?

システム ペースト バッファを使用する場合は、問題ありませんdw"+P"レジスタを選択する"+と、システム ペースト バッファになります。

それ以外の場合は、デフォルト以外のレジスタにコピーし、「"ayレジスタにコピーしてaから何かを置き換える」と言います。dw"aP

于 2010-03-18T15:58:59.973 に答える
2

を使用ywして単語をヤンクし、ヤンクされた単語で単語を変更して、vipw以前にヤンクした単語を貼り付けることができます。

于 2014-12-13T09:04:17.210 に答える
0

Shiftまたは、 + v-を実行することもできますp(行全体を選択して、その場所に貼り付けます)

于 2011-12-22T19:25:28.547 に答える
0

そのためにレジスタを使用できます。

登録簿の最初の場所の置換テキスト <mark some text>"ay

aレジスタ名はどこですか

次に、そのレジスタを代わりに使用できます

ve"ap

于 2010-03-18T15:58:00.300 に答える