ExtViewer.vimは vim/gvimで編集中のファイルを外部プログラムで開くためのプラグインです。
現在編集中のファイルをそのまま渡す事も、編集中の内容を加工してから渡す事も出来ます。
たとえば vim/gvim自体は縦書き表示が出来ないので vimから縦書き表示可能な外部ビューアを起動して確認する、というように使います。
日本語整形プラグイン「JpFormat.vim」に対応しているので連結マーカーが埋め込まれている場合は連結して、必要ならファイルエンコーディングの変換を行ってから外部ビューアへ渡します。
現在開いているファイルがperlならファイルの内容をperlスクリプトとして実行するなど、ファイルを開くプログラムやファイル内容の加工方法は拡張子ごとに指定可能です。
JpFormat.vim 1.02以降には同じものが含まれていますので「JpFormat.vim」を参照してみて下さい。
ExtViewer.vim (2009/11/18)
.vimrc (_vimrc) に以下を追加してください。
:ExtViewerを実行すると拡張子に応じたプログラムにファイルを渡して実行します。
また<F9>を押す事で、現在開いているファイルをcp932に変更してから ArisuViewerで開きます。
"<F9>を押すとtxtファイルタイプとして実行
noremap <silent> <F9> :ExtViewer txt<CR>
"Arisu Viewerはcp932しか扱えないので変換する(smoopyの場合は不要)
let EV_toFenc_txt = 'cp932'
"txtは ArisuViewerで開く
let ExtViewer_txt = '!start "'.'D:/usr/bin/arisuviewer/ArisuViewer.exe'.'"'.' -l%l "%f"'
"perlは実行する
let ExtViewer_pl = '!start "perl" "%f"'
"linuxの場合
if has('unix')
let ExtViewer_txt = "call system('evince %f &')"
let ExtViewer_pl = "call system('perl %f &')"
let EV_toFenc_txt = ''
endif
Windowsで smoopyを使用する場合は以下の通りです。
smoopyではファイルエンコーディングの変換が必要ないので EV_toFenc_txtの設定は不要です。
"txtは smoopyで開く
let ExtViewer_txt = '!start "'.'D:/usr/bin/smoopy/smoopy.exe'.'"'.' -l%l "%f"'
%f はファイル名、%l がカーソル位置の行番号に置換されます。
パスなどは環境に合わせてください。
デフォルトコマンドはExtViewer_cmdです。
ExtViewerを実行すると現在開いているバッファの内容をファイルに出力して外部プログラムで開きます。
外部プログラムは現在開いているファイルの拡張子に応じたものが実行されます。
:ExtViewer
.txt ファイルを開いているなら前節で設定したビューアを起動します。
この場合は変更を保存していなくても反映されることになります。
また、3:ExtViewer のようなカウント指定やビジュアルモードでファイルに渡す範囲指定が可能です。
ファイルタイプを指定して実行したい場合は ExtViewerに続けて指定します。
:ExtViewer pl
こうすると現バッファの拡張子にかかわらず perlとして実行されます。
直接ファイルを渡して実行したい場合は ! を付けて実行します。
:ExtViewer! txt
txtファイルタイプを指定した場合以下が有効になります。
"ファイル出力して実行する場合 cp932にコンバート
"デフォルトは '' でファイルエンコーディングの変更はしない
let EV_toFenc_txt = 'cp932'
"JpFormatを使用した連結を行う
let EV_JoinStr = 1
拡張子ごとに外部プログラムを変更するには ExtViewer_ の後に拡張子を付加したオプションを指定します。
外部ビューアの指定
htmlの場合
let ExtViewer_html = '!start "C:/Program Files/Internet Explorer/iexplore.exe" file://%f'
if has('unix')
let ExtViewer_html = "call system('firefox file://%f &')"
endif
ファイルエンコーディングの指定
"空文字列か未定義の場合はエンコーディングを変換しない
let EV_toFenc_html = ''
変換方法の指定
ファイル名を指定して実行する場合に変換方法を指定する事も出来ます。
EVwrite_ の後に拡張子を付加した関数がファイル作成用に呼び出されるので、.vimrc やその他適当なファイルに作成してランタイムパスの通ったディレクトリにコピーして下さい。
特に作成しない場合はデフォルトが使用されます。
単純に現バッファの内容をコピーするだけの関数は以下の通りです。
templateの部分を拡張子(今回の例では EVwrite_html)に変更して使用します。
"外部ビューアに渡すファイルを出力(template)
function! EVwrite_template(file, fline, lline)
let line = line('.')
let glist = getline(a:fline, a:lline)
let cnvCR = &fileformat == 'dos'
let toFenc = &fileencoding
"fencと改行を元ファイルと同一にする。
let loop = len(glist)
for i in range(loop)
let glist[i] = iconv(glist[i], &enc, toFenc)
if cnvCR
let glist[i] = substitute(glist[i], '$', '\r', '')
endif
endfor
call writefile(glist, a:file, 'b')
return line
endfunction
要はflineからllineまでを加工してfileに出力してやればよいので、pythonやrubyなどを呼び出して作成しても良いかと思います。