vimで縦に連番を入力する
vim/gvimで縦に連続した番号へ置換したいときがあります。
fuga[0] fuga[0] fuga[0]
これを次のように変更したりする場合です。
fuga[0] fuga[1] fuga[2]
適当なのが見あたらなかったので、適当に作ってみたものを使用しています。
.vimrc(_vimrc) に追加して使います。
nnoremap <silent> co :ContinuousNumber <C-a><CR> vnoremap <silent> co :ContinuousNumber <C-a><CR> command! -count -nargs=1 ContinuousNumber let snf=&nf|set nf-=octal|let cl = col('.')|for nc in range(1, <count>?<count>-line('.'):1)|exe 'normal! j' . nc . <q-args>|call cursor('.', cl)|endfor|unlet cl|unlet snf
使い方
カーソルを連番に置換したい数値に合わせて 3co と実行すると、縦に3行分が連番に置換されます。
ビジュアルモードで選択してから co だと選択行が連番に変更されます。
必ずしも数値の上でなければいけないという事はありません。
ただし対象範囲は全て同じ数字(開始値)にしておく必要があります。
また puyo1, puyo2, ...のような数値にも有効です。
fuga[2][1] fuga[2][1] fuga[2][1] puyo1 puyo1 puyo1
数値が不揃いの場合は
で数値部分を矩形選択 - s0 などとして連番の初期値に置換
- gvで範囲再選択
- co
という感じに、整形してから連番変更すると良いのではないかと思います。
ビジュアルモードでは
vnoremap <silent> <C-a> :ContinuousNumber <C-a><CR> vnoremap <silent> <C-x> :ContinuousNumber <C-x><CR>
(注意)
連番処理に
8進数処理が必要でない場合は nrformatsから8進数を認識しないよう設定すると良いかもしれません。
set nrformats-=octal