牢獄機械文書群 目次 » 計算機 » 現在地
連番を挿入する
2011-08-11 23:21

以下のように行頭に番号を振りたいとき、いちいち書くのが面倒だ。

12. 電話をかける
13. 買い物に行く
14. 図書館に本を返しに行く
15. 部屋を掃除する
16. 明日の支度をする

番号の初めの 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] などの文字列を対象にした場合も同様の処理。

« もどる
inserted by FC2 system