この記事ではAsynchronous Lint Engine, 通称ALEの導入例を紹介します.
例として, pythonの静的解析ツールautopep8
を導入しますが, 他の言語やツールでも同じようにできると思います.
環境とバージョン
OS: Ubuntu 16.04(WSL)
VIM - Vi IMproved 8.1
Python 3.6.5:: Anaconda, Inc.
ALEとは
ALEとは静的解析を非同期で実行してくれるものです.
そもそも静的解析とは, コードを静的に(実際にコードを実行せず, コード自体の表面上の)解析します.
変数の宣言がおかしいとか, 変数のスペルミス, ライブラリ読み込んだけど使ってないよとか, インデントがずれてるよといった実際にコードを動かさなくても分かる範囲のバグを自動で検出してくれます.
pythonの静的解析ツールはflake8
やmypy
など様々です.
実際, 静的解析ツールを使うには, シェル上で, コマンドを叩く必要があります.
しかし, ALEは, vim上で非同期で静的解析ツールを自動で実行してくれるすぐれものです.
つまり, いちいちシェルに戻ったり:!
を使うことなく, コードを書きながらチェックができるようになります.
静的解析ツールの導入
flake8
入れたいバージョンのpythonで,
pip install --upgrade pip
python -m pip install flake8
autopep8
pip install autopep8
ALEを導入
deinでインストールします.
~/.vimrc
に,
call dein#add('w0rp/ale')
を追加してvimを再起動.
使うLinterを設定
使うLinterを設定します.
言語ごとに違うので, おすすめは~/.vim/ftplugin/<プログラミング言語>.vim
に設定を書くと良い.
今回は, pythonなので, ~/.vim/ftplugin/python.vim
に設定を書くと,
pythonファイルを読み込んだときにその設定が読み込まれます.
さて, 使うLinterの名前をb:ale_fixers
かg:ale_fixers
(グローバルかbufferごとか)にリストで代入します.
letb:ale_fixers=['autopep8']
どうしても.vimrc
に書きたいという方は, ハッシュ形式で言語を指定できます.
letb:ale_fixers={'python':['autopep8']}
また保存時にファイルを自動で修正することも可能です.
この場合, g:ale_fix_on_save
を1
にする.
letg:ale_fix_on_save=1
他にも自動補完や定義ジャンプなど便利な機能があるので, README.mdを見るとよい.