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 :
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 :
Recent Comments
ありがとうございます!
http://nanasi.jp/articles/howto/editing/visualcursor-endtoend.html · 8 years ago
知りませんでした。有難うございました。
http://nanasi.jp/articles/howto/file/open-with-format.html · 9 years ago
<c-f>1ページ分、下にスクロールする<c-b>1ページ分、上にスクロールする
どっちも逆です。
http://nanasi.jp/articles/howto/user-manual/user-manual-motion.html · 10 years ago
set 使用時に : で閉じるのを忘れて右往左往してました。
http://nanasi.jp/articles/howto/file/modeline.html · 11 years ago
やっぱり日本語の方が早いっす。
http://nanasi.jp/articles/howto/help/help_ja.html · 12 years ago