複数回貼り付け


93

複数の行をクリップボードの内容に置き換える最良の方法は何ですか?

私が抱えている問題は、行をヤンクして別の行に貼り付けると、「ヤンク」が置換したばかりの行に置き換えられることです。ここで、別の行を同じ行に置き換えたい場合は、前に戻ってもう一度ヤンクする必要があります。

これを行うにはもっと良い方法があるはずです。

回答:


106

これは私の.vimrcにあります:

xnoremap p pgvy

(注:これはデフォルトのレジスターでのみ機能しますが、このマッピングは覚えやすいです)。より精巧なバージョンを書くことは可能でしょう。また、Pを使用して古い動作を取得することもできます。


28
賢い。'p'で貼り付け、 'gv'で元々選択されていたものを再選択します。もう一度コピーする場合は「y」。
Amjith、2011

@SibbsGambling、おそらくVim 7より前のバージョンを使用していますか?次に、Vimをアップグレードするか、x(vnoremap)の代わりにvを使用します。Vimヘルプファイルにversion7.txtは、xmapとsmapがそのバージョンで登場したと記載されています。
ブノワ

1
@Benoit Hmm、私は7.4.52を持っていますが、どちらxnoremapvnoremap機能していません
Gambling

8
なぜこれがデフォルトの動作ではないのですか?
Seth

27

"0あなたのヤンクの内容が必要です。タイプするのは少し面倒"0pですが、あなたがやりたいことをするべきです。

または、前の古い行を選択して置き換えないでください。検索でそれらの行を見つけた場合はn.、(最初のの後でpndd何度も何度もヒットし、それらがすべて貼り付けられたら、次に続けてn.必要なだけsをます。

Vimに移行するときに私が必要とした最大のメンタルスイッチは、グループ編集を順次適用する方法を理解することです。つまり、ある行で一連の編集を行ってから、別の行で同じ編集をまとめるのではなく、最初の編集を一連の行で行い(.効果が大きい)、次に2番目の編集をまとめて行いますまたは、マクロは素晴らしいので、マクロの使用が役立つ場合がありますが、「複雑な」変更を正しく処理するのに少し面倒な場合があります。


2
確認:%s/.../.../gcタイプコマンドを使用した正規表現が必要なものに近い場所のように聞こえる
Milimetric

@ミリメトリック+1はあなたがそのように確認できることを知りませんでした。

1
マクロはこれを問題としないため、賛成票を投じます。一度編集するだけで、次のようなことができます5@m(マクロの場合m
skatenerd

素晴らしい説明をありがとう。xnoremap p "0p私は〜/ .vimrcで使用しています
nexayq

13

私は別のレジストリをよく使用し、必要な行を名前付きレジストリにコピーして、"ayそこから貼り付けます"ap


11

Vimで選択範囲の上に貼り付けると、デフォルトのレジスターが選択範囲の内容で置き換えられます。選択範囲を貼り付けるとクリップボードレジスタの内容が消去される場合は、.vimrcに次の行が含まれている可能性があります。

set clipboard=unnamed

1つのオプションは、それを削除して、明示的なクリップボードレジスタを使用することです "+

別のオプションは、他の明示的に指定されたレジスタ(az)のいずれかを使用することです。最初の貼り付けの後、"cたとえば、行をヤンクして、"cpそこから貼り付けます。


実際、デフォルト(ここでは、Ubuntu)はclipboard = autoselectでした。それでも、これまでで最もエレガントな答えをありがとう。
東武

8

使用np場所nあなたが例えばラインを貼り付けたいどのくらいの時間の数である3p3行を貼り付けますが。


7
同じ行を隣接しない行に貼り付けたい場合は機能しません。
東武

@Tobuですが、この質問のタイトルは「どうやって複数回貼り付けますか」には答えます
icc97

6

多くの場合、コピー/貼り付けを使用する代わりにciw、内側の単語を変更するなどのテキストオブジェクトコマンドを使用することをお勧めします。この方法には、.repeatコマンドを使用して簡単に繰り返すことができるという利点があります。

  1. yiw 内側の単語をヤンクします(カーソルの下の単語をコピーし、「最初に」と言います)。
  2. ...カーソルを別の単語(たとえば「秒」)に移動します。
  3. ciw<C-r>0 「second」を変更し、「first」に置き換えます(Ctrl-Rです)。
  4. ...カーソルを別の単語(「サード」など)に移動します。
  5. . 「3番目」を「1番目」に置き換えます。

1
ciw<C-r>0私の場合は機能しません。役に立たなくなるciw挿入モードに変更します<C-r>。これについて簡単な説明はありますか?それはテキストエディタに関係しているのでしょうか(RStudioではPur VIMではなくVIMキーボードバインディングを使用しています)
Bushroot

@Bushroot <C-r>は、挿入モードを終了せずにレジスタから貼り付ける方法であるため、挿入モードでの使用を目的としています。つまり、Vimでは、私はRStudioに精通していませんが、あなたが正しいと彼らはこの特定のキーバインディングを実装していないと思います。
1

@ショーンH:はい。彼らはキーバインディングを実装しませんでした。VIMでも、他のプログラム(Visual Studio Codeなど)のVIMバインディングでも正常に機能します。
ブッシュルート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.