Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

syntasticでシステムではなくローカルの実行ファイルを動かす

$
0
0

syntasiticを使って自動チェックを行うには、 vim から Rubocop や eslint などを実行する必要があるので、よくシステム全体にツールをインストールしたりする。

npm install -g eslint

しかし、これだと全てのプロジェクトで同じバージョンの eslint を使わなければならないし、プロジェクトで使っているバージョンが変わるたびにシステムに入っているパッケージもこうしなければならず DRY ではない。どうにかしてプロジェクトローカルのバージョンを使いたい。

この課題には2つの対応策がある。

環境変数を設定する

一番簡単な方法は、プロジェクトでインストールした実行ファイルを使えるように PATHを設定することだ。

こういうディレクトリ固有の環境変数を管理するには direnvを使うのが楽だろう。 direnv をインストールしたあと、プロジェクトルートに次のような .envrc ファイルを作る

.env
export PATH="$(npm bin):$PATH"

この状態で起動した vim は PATHnpm binを含むので、 eslint を実行することができる。

この方法のいいところは、 syntastic に限らず様々なツールを一括で設定できることだ。その一方で、1つの vim の中で複数のプロジェクトを横断してファイルを編集したりすると、 vim を起動したプロジェクト以外の場所にあるファイルのチェックがうまくいかなくなってしまう。そういう状況がありうる場合は、次の都度設定する方法を取らなければならない。

都度設定する

syntastic は変数で簡単に言語ごとの設定ができるが、バッファ変数を使ってバッファごとに挙動を変えることができる。実行ファイルのパスを指定するには b:syntastic_<filetype>_<checker>_execを使う。

augroup SyntasticConfig
  au!auFileType javascript calls:syntastic_javascript_settings()
augroup END

function!s:syntastic_javascript_settings()if executable('npm')let bin_path = systemlist('npm bin')[0] . '/eslint'if executable(bin_path)letb:syntastic_javascript_eslint_exec = bin_path
    endifendifendfunction

このスクリプトは javascript ファイルを開くたびに npm で eslint がインストールされているか調べ、インストールされて入ればそれ使うようにする。なければシステムの eslint にフォールバックする。こうすることで、各 javascript ごとに正しい eslint を使うことができるようになる。


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>