basyura's blog

あしたになったらほんきだす。

Batch.vim

選択した範囲に記述されたvimエディタのコマンドを、順々に実行するスクリプトです。 vimエディタ設定の確認や、vimスクリプトのデバッグで使用します。 (Windows, Mac)

batch.vim - 名無しのVIM使い

これすげえ。今まで

  1. vimscript 書く
  2. vim or gvim 再起動
  3. 以後ループ

だったのに!さくっと動かして確認出来ちゃう。せっかくなのでこの Batch.vim のソースを読もうと思ったら既にコメントが丁寧に書いてある。処理としては

1. 選択した範囲の行のvimスクリプトを読み込む
2. 一時ファイルに書き出す
3. 一時ファイルに書き出したvimスクリプトを実行する
4. 一時ファイルを削除する

とな。すげい。ほぼ数行で済んでる処理を抜き出すと

:function! s:Batch() range
    " 選択した範囲の行のvimスクリプトを読み込む
    :let l:selected = getline(a:firstline, a:lastline)
    " 一時ファイルの名前を取得する
    :let l:tempfile = tempname()
    " try-finally文で確実に一時ファイルを後始末する
    :try
        " 一時ファイルに読み込んだスクリプトを書き出す
        :call writefile(l:selected, l:tempfile)
        :try
            " 一時ファイルのvimスクリプトを実行する
            :execute ":source " . l:tempfile

range を書いておけば getline で取れるのか。勉強になる。