以下のように行頭に番号を振りたいとき、いちいち書くのが面倒だ。
番号の初めの 12. だけを書いておき、それを基準に 16. まで作ってしまいたい。
カーソル行の文字列をコピーして数値を抽出し、for 文でその数に i を足していけばいい。
function! PutValue(elm) let l:elm = (a:elm == 0) ? 1 : a:elm exec 'let linevalue = ' \ .substitute(getline('.'), '\(^.\{-}\)\(\d\+\)\(.\{-}$\)', '["\1", "\2", "\3"]', '') for i in range(1, l:elm) call append(line('.') + i - 1, linevalue[0] .(linevalue[1] + i) .linevalue[2]) endfor endfunction
PutValue() は、カーソル行を基準に、引数に指定した数だけ連番を挿入する。
以下のように、map で引数に v:count を指定すると便利。 v:count はノーマルコマンドの先頭に入力した数。
noremap <silent> gwp :call PutValue(v:count)
この例だと、12. の行で 4gwp と入力すると、16. までの連番が挿入される。
(42) や foo[76] などの文字列を対象にした場合も同様の処理。