Edited at

Vimで「ヤンクしたテキストをdで上書きしちゃったよ」を解決

More than 1 year has passed since last update.


結論

主な2つを紹介します。


ブラックホールレジスタの使用

以下のように通常のコマンドの前に"_をつけることで、レジスタに保持されたテキストを上書きすること無くカーソル下のテキストを削除することが出来ます。

行削除

"_dd

単語削除
"_diw


ヤンクレジスタの使用

以下のようにプット時にpの前に"0をつけることで、直前にヤンクしたテキストをプットすることが出来ます。

このようにヤンクレジスタを使用することで、ヤンクしたテキストをdd等で削除しても上書きされることなく使用することが出来ます。

直前にヤンクしたテキストをプット

"0p


レジスタ

vimの削除/ヤンク/プットは一般的なソフトウェアで用いられるクリップボードを使用することは基本的にありません。

vimは20~30個ほどのレジスタを提供しています。

そこからレジスタを指定してテキストを保持するのがvimです。

"ayiwと入力すればaというレジスタにテキストを保存することが出来ます。

私達が普段レジスタを指定せずにdiwと入力している時は、無名レジスタというレジスタを使用しています。

そのため、削除とヤンクで別のレジスタを使用すれば上書きされることは無いということです。

冒頭で述べてる"_はブラックホールレジスタと呼ばれ、テキストはどこかにコピーすることなく削除されます。

"0はヤンクレジスタと呼ばれ、直前にヤンクしたテキストが保持されます。