LoginSignup
5

More than 5 years have passed since last update.

連番生成するVimプラグインを作ってみた

Posted at

はじめに

タイトル通り連番生成するVimプラグインを作りました。
連番生成のやり方としては標準で提供されているg<C-A>/g<C-X>vim-rengbangプラグインがありますが、どれも微妙に普段の定形作業にマッチしなかったので、自分で作ることにしました。
(ちなみに非定形の複雑な連番生成は正規表現マッチとprintf書式指定が使えるvim-rengbangのインタラクティブモードが非常に便利です)

使用イメージ

asciicast

特徴

  • 垂直方向の選択範囲だけ連番化
  • 基数・昇順降順が指定可能
  • スペース/ゼロ埋めによる自動桁揃え

使い方

インストール

vseq.vimにあります。
プラグインマネージャー等を使ってインストールしてください。

" vim-plug
Plug 'dalance/vseq.vim'

" dein
call 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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5