ヤンクしたテキストが削除で上書きされる問題
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