vimでは ddコマンドで現在オンカーソルな行を削除できます。
[count]dd とキータイプすれば現在行含み count下の行まで一気に削除できて便利です。僕は仕事柄膨大な行数のデータファイルを扱うことがままあり、その際に [count]dd はよく使用しているのですが、[count]ddライクに上方向にも行削除もできたらなぁ、とよく考えていました。そこで今回、vimスクリプトの勉強も兼ねて実装にチャレンジしてみました。
実装
ddの動作イメージから、以下のように動くことを目標とします。
- 「キー」をタイプするとオンカーソル行削除
- [count]「キー」でオンカーソル行含め上方向count行分を削除
- [count] 指定での操作で1行目まで削除したら、それ以上は削除しない。
以下のように vimスクリプトを組みました。
|
|
この関数を <Space>ddキーにキーマップします。
|
|
動作
実際に動かしてみます。4<Space>ddと入力します。
動きました!1行目や最終行にオンカーソルな状態でも期待通り動作します!
ここで満足しかけたのですが、上記の実装では vimの便利機能であるドット”.”キーによる操作の繰り返しができませんでした。これは不便です。なんとかドットリピート対応したい。
ドットで繰り返せるようにする
Vim script テクニックバイブルとかウェブの情報とか色々調べたところ、delisさんの以下の記事に行き当たりました。
後半にドットリピートについて言及されていました。どうやら repeat.vim を使えばできそうです。repeat.vim をインストールし、キーマップを以下のように変更してみました。
|
|
動かしてみます! 2<Space>dd とタイプしドットリピートします!
出来ました!ちゃんと[count]分だけ上方向に行削除できて、ドットで繰り返すことができます!
やった!
今回は初めてvimスクリプトを書いて色々勉強になりました。あと、GIFアニメ付きの記事を投稿するに当たり deris さんのブログにお世話になりっぱなしでした。Gifzo便利。