はじめに
vim-dispatchというプラグインがあります.
vimで非同期実行ができるプラグインです.
裏でコンパイルと実行を行いながら, ファイルの編集ができます.
ちょうど修士論文をtexで書いているので, 使ってみます.
VimからTeXコンパイル
私は, VimでTeXファイルの編集をしています.
しかしTeXファイルのコンパイルは, やたら時間がかかります.
特に, bibtexを使っていると, platexしてbibtexしてplatexしてplatexする必要があります.
コンパイル用に, こんなシェルスクリプトを使っています.
#!/bin/bash## autobibtex file=$1["$file"=""]&&{echo"input file name!";exit 0;}
nkf -w8 --overwrite $filefilename=$(basename $file .tex)
platex -shell-escape $filename".tex"
bibtex $filename".aux"
platex $filename".tex"
platex $filename".tex"
dvipdfmx $filename".dvi"
find . | grep -E "$filename.(bbl|log|toc|dvi|blg|aux)"| xargs rm
platexからbibtexからplatexからplatex. アホです.
時間がかかって作業が止まります. 辛いです.
Vimから出ずに, ファイルを編集しながら裏でコンパイルできたら嬉しいです.
latexmkやomakeで変更を監視して自動コンパイルする方法もあると思います.
しかし, 自動コンパイルはちょっと鬱陶しいです. 自分のタイミングでコンパイルしたいです.
そこで, 非同期実行を可能にするプラグイン: vim-dispatchを使います.
やってみたこと
texコンパイル用のスクリプトを書いておいて, それをvim-dispatchで呼び出します.
コンパイル用のスクリプトをautobibtexとします. 先ほどの, platexしてからbibtexしてplatexするシェルスクリプトです.
次に, vim-dispatchをインストールします.
NeoBundleを使っていれば, .vimrcに1行書くだけですね.
NeoBundle 'tpope/vim-dispatch'
そして, vimを起動して, $VIMRUNTIME/ftplugin/tex.vimを編集します.
こう打てばtex.vimの編集ができるはずです.
:e $VIMRUNTIME/ftplugin/tex.vim
tex.vimの中に, 2行だけ書き加えました.
nnoremap ,r :w<cr> :Dispatch! autobibtex % <cr>
nnoremap ,,r :w<cr> :Dispatch autobibtex % <cr>
:Dispatch! コマンドで, 非同期実行できます.
コンパイルメッセージも出てきません. 裏でコンパイルしてくれます.
vim-dispatchのおかげで, コンパイル中もファイルの編集ができます.
エラーがあって上手くいってなさそうな場合は, !マークを外したバージョンで実行してエラーメッセージを確認すればいいかなと思います.
感想
だいぶ快適です.
設定を3行書き加えただけで, コンパイルの時間が気にならなくなりました.
今回はコンパイル用のシェルスクリプトを呼んでいますが, makeファイルを書くほうが標準的ですよね. make+vim-dispatchの方がカッコ良さそうです.
ところで, 非同期ができても, PDF閲覧ソフトが自動更新してくれないと意味がないです.
Linuxならevince, MacならSkim.appなどが, PDFの変更を検知して自動更新してくれます.
Windowsは分かりません. TeXstudioとか使えばいいのでは.
以上です.