私はvimが大好きですが、よくある落とし穴の1つは次のとおりです。
明らかに、ワークフローは最初に削除され、次にヤンクされます。しかし、私がhave toをしなかったら、それはreeeeeaaaaaallllyニースでしょう。誰もがこれのためのトリックを持っていますか? vimにはうまく機能する貼り付けバッファーがありますか、または変更できる.vimrc設定はありますか?
ブラックホールである_
レジスタに渡します。
レジスタに貼り付けずに行を削除するには:
"_dd
:help registers
も参照してください。
何かを何度も貼り付けて「名前付き」レジスタにヤンクする場合は、おそらく最も安全です。
"aY
a
レジスタに行をヤンクします。 "ap
で貼り付けます。
ヤンクした行はまだレジスタ0にあるはずです。
"0p
行を貼り付ける(必要に応じて削除する)
すべてのヤンクおよび削除操作は、デフォルトで名前のないレジスタに書き込みます。ただし、最新のヤンクと最新の削除は常に番号付きレジスタに(別々に)格納されます。 レジスタ0
は、最新のyankを保持します。レジスタ1-9
は、最新の9個の削除を保持します(1
が最新です)。
つまり、a deleteは、名前のないレジスタの最新のヤンクを上書きしますが、0
レジスタに残っています。ブラックホール-他の回答で言及されているレジスタトリック("_dd
)は、名前のないレジスタの上書きを防ぐため機能しますが、必ずしも必要ではありません。
二重引用符を使用してレジスタを参照するため、最後にヤンクしたテキストを次のように貼り付けることができます。
"0p
これは優れたリファレンスです。
別の可能性は次のとおりです。
通常のように線を引きます
それらを貼り付けたい場所に行き、視覚的なラインモードに入ります(V
)
置換する行を選択します
p
を押して、行を貼り付けます。
これには、バッファが置き換えられたコンテンツと「スワップ」されるという追加の利点もあります
次のマッピングを使用して、ブラックホールレジスタへの削除を少し簡単にします。
nnoremap R "_d
このようにして、dd
はRd
になり、d$
はR$
になります。 R
は通常、置換モードに入るようにバインドされていることに注意してください。しかし、私はそれを使用したことがないため、「本当に削除」機能のキーを覚えるのが最も簡単でした。
" map paste, yank and delete to named register so the content
" will not be overwritten
nnoremap d "xd
vnoremap d "xd
nnoremap y "xy
vnoremap y "xy
nnoremap p "xp
vnoremap p "xp
このプラグイン(yankstack.vim) と書いて、この問題を解決しました。 Emacsのキルリング vimのようなものを提供します。複数の項目をヤンクまたは削除し、貼り付けてから、ヤンク/キルされたテキストの履歴を前後に切り替えることができます。どんなレジスターをヤンクしたかを覚えるよりも簡単です。
.vimrcには、次のマッピングがあります。
nmap <M-p> <Plug>yankstack_substitute_older_paste
nmap <M-P> <Plug>yankstack_substitute_newer_paste
aLT-pまたはALT-SHIFT-pを押すと、貼り付け履歴が前後に切り替わります。
具体的な質問、質問どおり、最後の2つのステップの順序を入れ替えることはできませんでしたか?
確かに、私は通常、この種のことに対して名前付きレジスタを使用しますが、解決策は最初に思い浮かぶものよりも簡単な場合があります。
次のレジスタを使用できます:"<register><command>
例えば。:
これは、行をレジスタa
にヤンクし、別の行を削除してから、レジスタa
を貼り付けます。
"ayy` (move) `dd"aP
これらの重要なコンボはすべて面倒です。代わりに、削除操作からバッファーを上書きするvimの「副作用」動作のオンとオフを切り替える関数を作成しました。そうすれば、それをオフに切り替え、自由に削除し、完了したら再びオンに切り替えることができます。
ここで私の答えを参照してください: https://stackoverflow.com/a/12649560/778118
使用するには、.vimrcに置くだけです
また、次のスクリプトを試すこともできます。 ReplaceWithRegister at vim.org/scripts/
悪意のあるユーザーであれば、Xを再マッピングして「_d」と同等の処理を行うことを検討できます。ただし、実装を完成させるのは少し厄介でした。それにもかかわらず、
(define-key evil-normal-state-map "X" 'evil-destroy)
(define-key evil-visual-state-map "X" 'evil-destroy)
(evil-define-operator evil-destroy (beg end type register yank-handler)
"delete without yanking text"
(evil-delete beg end type 95 yank-handler)
)
非常にうまく統合します。たとえば、XXと入力するとddと同様に機能し、X $とd $、X0とd0などが機能します。
どのように機能するかについて興味がある場合は、「95」は「_レジスタ」を表します。したがって、「_が押されたレジスタであるかのように、コールを削除するようにルーティングし直すだけです。
秘Theは、何かをつかんで移動したいということを知っていて、「怠 'な」最初のレジスターを使用していることです(削除したばかりのものに置き換えられます)。
Vimで「カット」することを学ぶ必要があります。
削除する前に、"
以外のレジスタを指定してください。ヒント::reg
を使用してレジスタをチェックアウトします
ここで、コマンドの前に"
を押して新しいレジスターを選択します(明らかにコマンドモードで)
1
)、削除します:"1d
または"1x
またはさらに"1c
"1p
または"1P
できた。これには、ユースケースを解決するという利点もあります:1つの場所から5つの異なるものを削除し、各ピースが異なる宛先に移動します... "1
に別のものを置き、"2
に別のものを配置します...各宛先に移動して貼り付けます。