牢獄機械文書群 目次 » 計算機 » 現在地
空のバッファに文字列を入れる
2011-08-10 22:06

スクリプトを使ってバッファの文字列を操作する場合は、関数 setline もしくは append を利用する。

setline は指定した行の内容を書き換え、append は指定した行の次の行に内容を挿入する。


setline(lnum, expr) の lnum は行番号を整数で、expr はその行の内容を文字列かリストで指定する。

append(lnum, expr) も同じ。


setline(11, 'foobar') は 11行目の内容を foobar という文字列に変える。

append(11, 'foobar') は 12行目に foobar という行を挿入し、元の12行目の内容は 13行目にずれる。


行の内容を書き換えたい場合に setline を、新しく行を追加したい場合に append を使う。


たとえば、カレントバッファ内の "平成" という文字列を含むすべての行において "隧道" という文字列を "トンネル" に置換したいときには、以下のようにできる。

call cursor(1,1)
while (search('平成', 'W') != 0)
    call setline('.', substitute(getline('.'), '隧道', 'トンネル', 'g'))
endwhile

複数行を挿入したい場合にはリストを用いる。

call append('.', ['いろはにほへと', 'ちりぬるを'])

これによって、たとえば HTML 文書のテンプレートの挿入などが容易にできる。


空のバッファにテンプレートを挿入するとき、append で1行目を指定すると、2行目以降に挿入されてしまう。(挿入先は指定行の次の行だから。)

かといって 0行目を指定すると、バッファ末尾に空行ができてしまう。(バッファには最低でも1行が初めから確保されていて、append の処理は挿入だから。)


だから空のバッファにそのまま文字列を入れたい場合には、setline で1行目を指定してリストを用いる。

call setline(1, ['おわあ、こんばんは。', 'おわあ、こんばんは。', 'おぎやあ、おぎやあ、おぎやあ。'])

空ではないバッファの場合には注意が必要だ。 setline の処理は書き換えだから、上の例だとバッファの 1行目から 3行目がこの 3行に置き換わる。

append は指定したリストの要素の数だけ新たに行を追加し、setline の場合はリストの要素の数だけ行を書き換える。


そんなわけで、空のバッファにテンプレートを挿入するには setline が便利と思う。

« もどる
inserted by FC2 system