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