デモ
縦の連番の作成
Vimで縦の連番を作成する場合、その場限りのマクロを組んで対応するのが一般的だと思います。
ただ、個人的な意見としてマクロの作成は結構面倒というか、タイプを間違えて最初からやり直しになるあの徒労感を考えると、できれば避けたいやり方です。
幸い、連番作成系のタスクはおおまかなマクロの形が決まっているので、
数字を選択するテキストオブジェクト(textobj-numeral)を使うと簡単に書けます。
vimrc
setnrformats-=octal
NeoBundle 'kana/vim-textobj-user'
NeoBundle 'tkhren/vim-textobj-numeral'function! Increment(step)let inc_key =a:step >0 ? '^A' : '^X'let @z ='"zyadjvad"zp'. abs(a:step) . inc_key
return'@z'endfunction
nmap <expr>+ Increment(1)
nmap <expr>- Increment(-1)"" 補足1) `^A`と`^X`は、`<C-v><C-a>`それぞれ`<C-v><C-x>`で入力できる特殊文字"" 補足2) `ad` は '[-+]?\d+' にマッチするテキストオブジェクト
これで ++++++++++++++
とか-------------
を押し続けるだけで上のGIF画像のようなインクリメント/デクリメントができます。また、Increment()関数が返すのはマクロなので、100+
のように行数を指定して実行することもできます。
Submode.vim を使う
Submode.vimを使うと、 例えば、<Space>+++++++++++++++++
のようにprefix付きでマッピングできます。
NeoBundle 'kana/vim-submode'
call submode#enter_with('increment', 'n', 'e', '<Space>+', 'Increment(1)')
call submode#map('increment', 'n', 'e', '+', 'Increment(1)')
call submode#enter_with('decrement', 'n', 'e', '<Space>-', 'Increment(-1)')
call submode#map('decrement', 'n', 'e', '-', 'Increment(-1)')
その他
需要があるのか分かりませんが、コードをいじれば
step=2
とすれば 0,2,4,6,8,10,... の連番になるad
→ax
とすれば、16進数を対象にできる
のような派生もできます。
同じようなマクロを返す関数を作れば、発想次第でいろいろできそうです。