レジスタをクリアせずに特定の操作を実行する


30

多くの場合、構成ファイルで行のブロックをコピーして貼り付けてから、そのブロックに小さな変更を加えます。貼り付けた後、x削除する文字を削除してから、次のブロックを貼り付けます。を除きx、削除された文字をクリップボードに置くので、行ブロックを再度コピーする必要があります。

挿入モードに入らずにこれを行う方法はありますか?


回答:


35

オプションは次のとおりです。

  1. ブラックホールレジスタを使用します_。たとえば、次のように入力し行を削除します"_dd。これにより、クリップボードに影響を与えることなく削除されます。
  2. 元のヤンクのレジスタに明示的に名前を付けます。たとえば、名前付きレジスタに行をヤンクするには、入力して"ayyから貼り付けます"ap
  3. 代わりに、yankレジスタを使用して元のyankを取得します。ヤンクし、必要に応じて削除してから、タイプを貼り付けます"0p
  4. vim-easyclipなどのプラグインを使用して、deleteオペレーターとは異なるカットオペレーターを提供します(完全開示:私はそれを書きました)

:help registers最初の3つの詳細について実行します


4
だからx私は"_xそれから使用したいですか?
durron597

1
そのとおりです。
スティーブバーミューレン

2
@ durron597で一度に1文字を削除する場合は、次の2つの空白で区切られたトークンを削除する次の閉じ括弧までx削除するようなモーション削除を学習する必要があります。次に、ブレースされた領域内で何かをするかもしれません。ノーマルモードでは、この手段「の削除、すべての内部このブレースに地域のブラックホールdt)d2W"_di{
OregonTrail

nnoremap x "_x私に追加~/.vimrc(ここでの説明:stackoverflow.com/questions/54255/…)。
ビクトリアスチュアート

11

xクリップボードに物を置くのではなく、レジスタに入れます。どのレジスタに入れるかを指定しないと、名前のないレジスタに入れられ、もちろん以前の内容が上書きされます。そのため、代わりに、使用するレジスタを指定します" REGISTER x。REGISTERは任意の1文字です。次に、同じquote-registerプレフィックスpを使用して、そのレジスタから貼り付けます。(注:コンテンツは小文字で置き換えられ、大文字が追加されます)。

また、2つの特殊レジスタ"0とがあり"1ます。"0は、最近ヤンクされた(y)テキストで、別のコマンド(などx)でテキストを削除しても残ります。"1は、テキストが小さくない(1行)限り、最後に削除されたテキストです。削除された小さなテキストはに入り"-ます。

最後に、Steve Vermeulenが指摘するように、ブラックホールregisterを指定することで、削除されたテキストを保存しないようにvimに指示できます"_

関連するヘルプコマンドは:help registersです。


3

この:letコマンドを使用すると、名前付きレジスタを再定義できます。vimのコマンドラインで、Control+をR 2回1を押してから、レジスタ名を入力すると、レジスタの内容がコマンドに貼り付けられます。その後、貼り付けた内容を変更し、変更内容とともにレジスタを保存できます。

例:

  • 通常モードでは、テキスト「Foo Bar」を含む行で、入力すると"fyy行全体(yy)がfレジスター("f)にヤンクされます。
  • を入力し:let @f='、さらにControl+ rControl+ r、さらにfを入力すると、「Foo Bar」に貼り付けられるので、コマンドラインがを読み取り:let @f='Foo Bar、カーソルが最後にくるようになります。
  • これで、矢印を使用してキーを削除し、貼り付けた内容を編集できます(例:):let @f='foo bar baz
  • 引用を終了します::let @f='foo bar baz'を押しEnterます。

これで、fレジスタの内容を「foo bar baz」に再定義しました。

(これはマクロでも機能します!:help let詳細については。)


1 Control +をr使用すると、文字を入力しているように、既に挿入モードになっているときにレジスタを挿入できます。この配列を用いて二回は、「テキストがない場合は入力した通り、文字通り挿入されている。レジスタは以下のような文字が含まれている。この異なるために重要です<BS>。」— insert.txt vimdoc、:help i_CTRL-R_CTRL-R


0

ブラックホールレジスタに関連した"_あなたが有益なスクリーンキャストを見つけることができます@derobertで言及http://vimcasts.org/episodes/meet-the-yank-register/

Vimは、より標準的な用語であるカット、コピー、およびペーストの代わりに、delete、yank、およびputという用語を使用します。同じ文字から始めて、貼り付けと貼り付けは簡​​単に交換できます。ヤンクという言葉に慣れると、コピーと同義語になります。しかし、Vimの「削除」という言葉の使用には問題があります。ほとんどのコンテキストでは、削除という言葉は単に削除を意味します。しかし、Vimの削除操作はテキストをレジスターにコピーし、ドキュメントから削除します。つまり、Vimの削除操作はカットのように動作します。


2
これは質問に対する答えを提供しません。投稿者に批評または説明を依頼するには、投稿の下にコメントを残します-自分の投稿にいつでもコメントできます。評価が十分になったら、投稿にコメントできます。
ジェームスサン

元の投稿にコメントしようとしましたが、できませんでした。唯一の代替私は@jamessan選んだものだったしていた
マーロン・レオン

0

プラグインReplaceWithRegister

http://www.vim.org/scripts/script.php?script_id=2703(2009-2014

それはマッピングを提案しgrます。

  1. ヤンク
  2. 置換したいテキストを視覚的に選択して押します gr
  3. 置き換えたい次のブロックに移動します

または、gr<text object>視覚的に選択せずに使用します。repeat.vimTim Popeとvisualrepeat.vimIngo Karkatのプラグインがインストールされている場合、ドットリピートがサポートされます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.