ヤンクしたテキストが削除で上書きされる問題
vimではヤンクしたテキストも削除したテキストも無名レジスタに登録される。
そのため、ヤンク→削除の順番で操作すると、無名レジスタの内容は、削除したテキストで上書きされてしまう。
プットする際に0
レジスタを指定すればヤンクしていたテキストを貼り付けられるが、面倒なのでクリップボードのように使える方法をデフォルトにしておきたい。
解決策
-
d
は削除専用 -
c
,s
で消した内容も削除 -
x
は本来のd
の挙動を再現 = 切り取り
xを削除専用にすれば設定の量は減るが、
削除= "d"elete
切り取り = ctrl + x
のイメージで、こっちのほうがしっくりきたので。
d
は削除専用
まずd
を使用した場合は、ブラックホールレジスタを使って削除内容をどのレジスタにも登録しないようにする。これで削除による無名レジスタの上書きを防げる。
nnoremap d "_d
nnoremap D "_D
xnoremap d "_d
その他の削除系のキー
c
, s
を使用した場合も削除されたテキストが無名レジスタに登録されてしまうので、ブラックホールレジスタを使用する。
nnoremap c "_c
nnoremap C "_C
nnoremap s "_s
nnoremap S "_S
xnoremap c "_c
xnoremap C "_C
x
はdl
で代用
カーソル上の文字を削除するx
はdl
で、カーソルの直前の文字を削除するX
はdh
でそれぞれ代用可能である。
このように本来x
,X
で行う操作を他のキーで代用すればx
,X
のキーを別の操作に使用できるので、これを切り取り専用にすればOK。
キーのタイプが一回増えてしまうが、個人的にはx
やX
よりもdl
やdh
のほうが押しやすいと感じるのでとくに問題はない。
x
を切り取りに使用する
x
はvim本来のd
の挙動をするように設定。つまりx
を使用して削除した場合は無名レジスタに登録されるようにする。
d
の操作と合わせるために、xx
は行の切り取りに割り当てた。
X
も空くので、D
と同じ挙動をするようにした。
もちろんxiw
や3xx
といったモーションやカウントとの組み合わせも、本来のdiw
や3dd
と同じ挙動をする。
nnoremap x d
nnoremap xx dd
nnoremap X D
xnoremap x d