LoginSignup
6
5

More than 5 years have passed since last update.

vim-dispatchでTeXファイルを非同期コンパイル

Last updated at Posted at 2015-01-04

はじめに

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 $file
filename=$(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から出ずに, ファイルを編集しながら裏でコンパイルできたら嬉しいです.

latexmkomakeで変更を監視して自動コンパイルする方法もあると思います.

しかし, 自動コンパイルはちょっと鬱陶しいです. 自分のタイミングでコンパイルしたいです.

そこで, 非同期実行を可能にするプラグイン: 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とか使えばいいのでは.

以上です.

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5