Edited at

vimでdeleteいろいろ

More than 3 years have passed since last update.

最初viの使いにくさとカスタマイズの弱さが嫌で長らくemacserだったのですが、NeoBundleとかを知ってからvimに乗り換えています。

.vimrcをいろいろいじると簡易なIDEとしても十分使え...ることもありますし(go言語の場合はかなりよい)、colorschemeがイイカンジですから。

改めていろいろ使ってみると「こんなのあったらいいなあ」→「実はありました!」みたいなのが多くて驚きます。

今回はdeleteについてメモ代わりにまとめてみました。


基本的なお話(おさらい)

vimの場合、delete(削除)は消したい位置にカーソルを持って行ってコマンドモードで

d<enter>もしくはdd(1行削除)

みたいにします。つまりdがdeleteコマンドです。念のため。


今回のお題

こういう行があったとします。

          hello, xdelete!!!


  • 左側の空白を削除したい

あっちこっちで編集してるとうっかりハードタブとソフトタブ(スペース)が入り混じったりしてインデントがぐちゃぐちゃになるケースって結構あると思います。そのときは左側の空白を一回消してタブ打ち直すか!となりませんか?(goだとgo fmtがあるから無敵か...)

こういう場合は行頭にカーソルを移動してから

d/h<enter>(文字'h'より手前を削除)

または正規表現を使って

d/\S<enter>('\S'(空白以外の文字)より手前を削除)でOK。

文字数がわかってれば10xでもいいんですが上記のようにハードタブと混じってるとアウトですし。

結果はもちろん

hello, xdelete!!!

になります。


  • 特定の文字まで含めて削除したい

xdeleteのxがイヤンな感じなので消します。

この場合はdfx(文字'x'を含めて削除)。

結果は

delete!!!

になります。


  • カーソルがどこにいてもその単語をまるまる消したい

例えばカーソルがhelloの最初のlの前にいた場合、単純にdwってすると

          he, xdelete!!!

になりますが、dawとすると単語がまるまる消えて

          , xdelete!!!

になり、daWとすると続くカンマと空白まで消えて

          xdelete!!!

となります。


補足

他のコマンド、c, y, tなどでも同じように使えます。