はじめに
タイトル通り連番生成するVimプラグインを作りました。
連番生成のやり方としては標準で提供されているg<C-A>
/g<C-X>
やvim-rengbangプラグインがありますが、どれも微妙に普段の定形作業にマッチしなかったので、自分で作ることにしました。
(ちなみに非定形の複雑な連番生成は正規表現マッチとprintf書式指定が使えるvim-rengbangのインタラクティブモードが非常に便利です)
使用イメージ
特徴
- 垂直方向の選択範囲だけ連番化
- 基数・昇順降順が指定可能
- スペース/ゼロ埋めによる自動桁揃え
使い方
インストール
vseq.vimにあります。
プラグインマネージャー等を使ってインストールしてください。
" vim-plug
Plug 'dalance/vseq.vim'" deincall dein#add('dalance/vseq.vim')" NeoBundle
NeoBundle 'dalance/vseq.vim'
コマンド
以下のコマンドを提供します。
VSeqIncrOct
VSeqIncrDec
VSeqIncrHex
VSeqDecrOct
VSeqDecrDec
VSeqDecrHex
Incrがインクリメント、Decrがデクリメント、末尾が基数です。
マッピング
<Plug>(vseq-incr-oct)
<Plug>(vseq-incr-dec)
<Plug>(vseq-incr-hex)
<Plug>(vseq-decr-oct)
<Plug>(vseq-decr-dec)
<Plug>(vseq-decr-hex)
コマンドにそのまま対応しています。
また、vim-operator-userプラグインがインストールされていると
以下のマッピングも使えます。
こちらでマッピングするとドットリピートが効いて便利です。
<Plug>(operator-vseq-incr-oct)
<Plug>(operator-vseq-incr-dec)
<Plug>(operator-vseq-incr-hex)
<Plug>(operator-vseq-decr-oct)
<Plug>(operator-vseq-decr-dec)
<Plug>(operator-vseq-decr-hex)
オプション
g:vseq#upper_case
1にすると16進数のa-fが大文字になります。
デフォルトは0です。
g:vseq#padding_right
1にすると空白によるパディングが発生する場合に右側にパディング(すなわち左詰め)します。
ゼロパディングは(当然ですが)常に右詰なので関係ありません。
こちらもデフォルトは0です。
その他
- 選択範囲は数値の一部でも大丈夫です。(
<C-A>
系と同じ挙動のはずです) - もとの数値がゼロ開始で2文字以上ならゼロ埋めで桁揃えします。それ以外の場合スペースで桁揃えします。
- 選択範囲に(一部の行だけでも)数値がない場合、なにも起こりません。
おわりに
これまで<C-A>
系を使った自作関数で連番生成してきたのですが、16進数の扱いがどうしても気に入らず自作することにしました。
(Vimは0x
開始の数値しか16進数と認識してくれませんが、'h
開始の言語もあるのです…。nrformats=force_hex
とかあればそれでもよかったんですが)
このプラグインを作るにあたり以下のプラグインを使用・参考にさせていただきました。ありがとうございます。
-vim-rengbang
-vim-operator-user
-vimhelpgenerator