パーソナルツール

batch.vim

作者: 小見 拓 最終変更 2012年01月08日 12時13分

 1 " 1度スクリプトを読み込んだら、2度目は読み込まない
 2 :if &cp || exists("loaded_batch")
 3     :finish
 4 :endif
 5 :let loaded_batch = 1
 6
 7 " ユーザの初期設定を逃がす
 8 :let s:save_cpo = &cpo
 9 :set cpo&vim
10
11 " 1. 選択した範囲の行のvimスクリプトを読み込む
12 " 2. 一時ファイルに書き出す
13 " 3. 一時ファイルに書き出したvimスクリプトを実行する
14 " 4. 一時ファイルを削除する
15 :function! s:Batch() range
16     " 選択した範囲の行のvimスクリプトを読み込む
17     :let l:selected = getline(a:firstline, a:lastline)
18     " 一時ファイルの名前を取得する
19     :let l:tempfile = tempname()
20     " try-finally文で確実に一時ファイルを後始末する
21     :try
22         " 一時ファイルに読み込んだスクリプトを書き出す
23         :call writefile(l:selected, l:tempfile)
24         :try
25             " 一時ファイルのvimスクリプトを実行する
26             :execute ":source " . l:tempfile
27         :catch
28             " エラー発生時は、エラーの原因とエラーの起きた場所を表示
29             :echohl WarningMsg |
30                 \ :echo "EXCEPTION :" v:exception |
31                 \ :echo "THROWPOINT:" v:throwpoint |
32                 \ :echohl None
33         :endtry
34     :finally
35         " ファイルを変更できるかチェック
36         " (ついでにファイルがあるかどうかも)
37         :if filewritable(l:tempfile)
38             " 一時ファイルを削除
39             :call delete(l:tempfile)
40         :endif
41     :endtry
42 :endfunction
43
44 " 行を選択して実行するコマンドBatch。s:Batch()を呼び出す
45 :command! -range -narg=0 Batch :<line1>,<line2>call s:Batch()
46
47 " 退避していたユーザのデータをリカバリ
48 :let &cpo = s:save_cpo
49 " スクリプトはここまで
50 :finish
51
52 ==============================================================================
53 スクリプトの説明
54
55 vimスクリプトを記述した行をビジュアルモードで選択して、
56 :'<,'>Batch
57 で、選択した範囲の行のvimスクリプト文を順に実行する。
58
59 ・設定ファイルの一部のみ読み込んで、結果を見たい時
60 ・スクリプトの一部分のみ、テスト的に実行したい時
61 などに使用する。
62
63 ==============================================================================
64 見るべきところ
65
66 ・一時ファイルの使い方
67 ・try-finallyの使い方
68 ・範囲指定可能なコマンド定義、選択範囲の取得方法
69
70 ==============================================================================
71
72 " vim: set ff=unix et ft=vim nowrap :
ドキュメントアクション
コメント
blog comments powered by Disqus