1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

vimで編集完了時にコンパイルを自動設定する

Last updated at Posted at 2017-06-07

対象

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

概要

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

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

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

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

let g:tex_flavor='latex'

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

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

  • ~/.vim/ftplugin/scss.vim
  • ~/.vim/ftplugin/tex.vim

設定を記述する

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

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

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

最終的な着地点

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

~/.vimrc
filetype plugin on
augroup setAutoCompile
    autocmd!
    autocmd BufWritePost *.tex :lcd %:h | :!latexmk %:p
    autocmd BufWritePost *.c :lcd %:h | :!gcc %:p
    autocmd BufWritePost *.R :lcd %:h | :!R -f %:p
augroup END

これでvimrcが強くなりました。
ftpluginの存在を知れてよかったです。

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?