LoginSignup
9
3

More than 5 years have passed since last update.

vimで保存時に自動コンパイル

Last updated at Posted at 2018-07-04

対象

  • vimが好き
  • コンパイルが面倒
  • シェルで作業してる人

概要

latexやsassなど主にコンパイルが面倒なものは自動コンパイルがそもそも実装されています。
latexであれば
$ latexmk -pvc sample.tex
sassであれば
$ sass --watch sample.scss:sample.css
ファイルの変更を自動で読み、コンパイル、エラー文を吐いてくれます。
しかし、毎回編集を行う前に打ち込むのは面倒。
今回はコンパイルを自動化していきます。

vimでファイルタイプごとに設定を分ける。

vimには拡張子ごとに設定ファイルを分ける機能が標準装備されています。
filetypeを指定することによってそれが可能になります。
詳しく知りたい方は公式リファレンスをクリックしてみてください。試しにtexの例を見ていきます。

~/.vimrc
filetype plugin on
augroup fileTypeSet
    autocmd!
    autocmd BufNewFile,BufRead *.tex setfiletype tex
augroup END

let g:tex_flavor='latex'

vimのaugroup内でファイルを開いた時の設定を記述することができます。上記のようにすると拡張子がscssの場合、filetypeとしてscssを読み込む。という意味になります。
またtexをfiletypeとして指定するとき一つ注意点があり、texは元々vimのグローバル変数の設定からfiletypeを振り分けることができるようになっています。
だから新しく追記する代わりに変数に代入してやります。

vimはruntimepathに設定しているファイルを読みに行くのでここはおとなしく標準で設定されている~/.vim/ftplugin以下に拡張子ごとの設定ファイルを置いていきます。
ftpluginはなければ自分で作成します。

  • ~/.vim/ftplugin/tex.vim

設定を記述する

vimではコマンドラインモードで:!を用いることによってシェルのコマンドを実行することができます。:!latexmk %:p でファイル保存時にlatexをオートでコンパイルするようにしました。%:pは編集ファイルのフルパスが入ります。

~/.vim/ftplugin/tex.vim
autocmd BufWritePost * :!latexmk %:p

これはこれで動いたのですがここで僕はそもそもこんな少量でいいんだったらそのままvimrcにかけばよくね?となりました。

最終的な着地点

現在僕のvimrcはこのようになっています。
Rとlatexとc言語のコンパイルを行えるようにしています。

~/.vimrc
filetype plugin on
augroup setAutoCompile
    autocmd!
    autocmd BufWritePost *.tex :!latexmk %:p
    autocmd BufWritePost *.c :!gcc %:p
    autocmd BufWritePost *.cpp :!g++ -std=c++14 %:p
    autocmd BufWritePost *.R :!R -f %:p
augroup END

これでまたvimrcが強くなりましたね。

メリット

  • 保存時にエラー文が見れるので楽
  • コンパイルする手間が省ける(競技プログラミングに強い)

デメリット

  • 壊れたコードのままうかつに保存すると大量のエラー文がでる(逆に言えばコンパイルできないコードの状態で保存しない癖がつく...??)
  • 各コマンドはvimのカレントディレクトリにコンパイル後のファイルを吐き出すので、出力させたいディレクトリで作業する、または出力先を編集中ファイルのディレクトリにするようなオプション追加などが必要になります。
9
3
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
9
3