LoginSignup
2
1

vimの削除と切り取りを分離する

Posted at

ヤンクしたテキストが削除で上書きされる問題

vimではヤンクしたテキストも削除したテキストも無名レジスタに登録される。
そのため、ヤンク→削除の順番で操作すると、無名レジスタの内容は、削除したテキストで上書きされてしまう。
プットする際に0レジスタを指定すればヤンクしていたテキストを貼り付けられるが、面倒なのでクリップボードのように使える方法をデフォルトにしておきたい。

解決策

  • dは削除専用
  • c,sで消した内容も削除
  • xは本来のdの挙動を再現 = 切り取り

xを削除専用にすれば設定の量は減るが、
削除= "d"elete
切り取り = ctrl + x
のイメージで、こっちのほうがしっくりきたので。

dは削除専用

まずdを使用した場合は、ブラックホールレジスタを使って削除内容をどのレジスタにも登録しないようにする。これで削除による無名レジスタの上書きを防げる。

vimrc
nnoremap d "_d
nnoremap D "_D
xnoremap d "_d

その他の削除系のキー

c, sを使用した場合も削除されたテキストが無名レジスタに登録されてしまうので、ブラックホールレジスタを使用する。

vimrc
nnoremap c "_c
nnoremap C "_C
nnoremap s "_s
nnoremap S "_S
xnoremap c "_c
xnoremap C "_C

xdlで代用

カーソル上の文字を削除するxdlで、カーソルの直前の文字を削除するXdhでそれぞれ代用可能である。
このように本来x,Xで行う操作を他のキーで代用すればx,Xのキーを別の操作に使用できるので、これを切り取り専用にすればOK。
キーのタイプが一回増えてしまうが、個人的にはxXよりもdldhのほうが押しやすいと感じるのでとくに問題はない。

xを切り取りに使用する

xはvim本来のdの挙動をするように設定。つまりxを使用して削除した場合は無名レジスタに登録されるようにする。
dの操作と合わせるために、xxは行の切り取りに割り当てた。
Xも空くので、Dと同じ挙動をするようにした。
もちろんxiw3xxといったモーションやカウントとの組み合わせも、本来のdiw3ddと同じ挙動をする。

vimrc
nnoremap x d
nnoremap xx dd
nnoremap X D
xnoremap x d
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1