Vimメモ : ALE(Asynchronous Lint Engine)で非同期コードチェック
ALE(Asynchronous Lint Engine)
上記記事で、flake8
でPythonのコードをチェックするためにSyntastic
やvim-flake8
を使ってみたが、チェック中に操作ができないので非同期で動作するプラグインを調べてみる。
プラグインとしてはvim-watchdogsやNeomakeがあるが、今回はALE(Asynchronous Lint Engine)
プラグインを試してみる。
ALE
はNeovimとVim 8で動作する非同期コードチェックのプラグインで、図のように入力しながらのコードチェックが可能になる。
サポート言語とLintツール
サポートしている言語とLintツールは下記リンクに書いてある。
GitHub - w0rp/ale: Asynchronous Lint Engine
言語とLintツールの例としては下記表を参照。
Language | Tools |
CoffeeScript | coffee, coffeelint |
CSS | csslint, stylelint |
HTML | HTMLHint, tidy |
JavaScript | eslint, jscs, jshint, flow, standard |
JSON | jsonlint |
Python | flake8, mypy, pylint |
Ruby | rubocop |
SASS | sass-lint, stylelint |
SCSS | sass-lint, scss-lint, stylelint |
インストール
NeoBundleの場合は下記行をvimrc
に追加。
NeoBundle 'w0rp/ale'
deinの場合は下記行をdein.toml
などに追加。
[[plugins]] repo = 'w0rp/ale'
使い方
LintツールとALEのインストールが成功していれば特に設定しなくても動作するようになっており、ファイルオープン時や入力中に非同期でコードチェックが実行される。
画面の左端にエラーの場合は>>
、警告の場合は--
が表示され、選択行に対するメッセージが画面下部に表示される。
FAQと設定
READMEにFAQが書いてあるので、FAQを見ながら設定方法を確認する。設定のヘルプは:help ale-options
や:help ale-linter-options
に書いてある。
特定のLintツールのみを有効にする
デフォルトの設定では編集中の言語で利用可能なLintツールが全て実行されるので、特定のLintツールのみを有効にしたい場合は以下のように記述する。
let g:ale_linters = { \ 'javascript': ['eslint'], \}
左端のシンボルカラムを表示したままにする
エラーと警告を表す>>
、--
が表示されている左端のシンボルカラムは、全てのエラーと警告がなくなると非表示になる。画面全体が左に動くことになるため、これが気になる場合は下記設定を追加することでシンボルカラムを常に表示しておくことができる。
let g:ale_sign_column_always = 1
シンボルを変更する
エラーと警告のシンボルを変更したい場合は以下のように記述する。
let g:ale_sign_error = '!!' let g:ale_sign_warning = '=='
ハイライトも変更可能で、無効にしたい場合は下記設定を追加する。
highlight clear ALEErrorSign highlight clear ALEWarningSign
エラーと警告数をステータスラインに表示する
エラーと警告数をステータスラインに表示したい場合は、statusline
設定に%{ALEGetStatusLine()}
を追加する。
lightline.vimを使用している場合は以下のように設定すればよい。
let g:lightline = { \'active': { \ 'left': [ \ ['mode', 'paste'], \ ['readonly', 'filename', 'modified', 'ale'], \ ] \}, \'component_function': { \ 'ale': 'ALEGetStatusLine' \} \ }
ステータスラインで表示するフォーマットを変更したい場合は、下記設定を追加。1番目がエラー、2番目が警告、3番目がエラーと警告がなかった場合の表示。
let g:ale_statusline_format = ['⨉ %d', '⚠ %d', '⬥ ok']
メッセージのフォーマットを変更する
メッセージのフォーマットも以下のように変更可能。
let g:ale_echo_msg_error_str = 'E' let g:ale_echo_msg_warning_str = 'W' let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
コードチェック完了後に特定の操作を実行する
コードチェック完了後に特定の操作を実行したい場合は、以下のように記述する。
augroup YourGroup autocmd! autocmd User ALELint call YourFunction() augroup END
エラー間を移動する
エラー間をキー操作で移動したい場合は以下の設定を追加。C-j
で次のエラー、C-k
で前のエラーに移動できる。
nmap <silent> <C-k> <Plug>(ale_previous_wrap) nmap <silent> <C-j> <Plug>(ale_next_wrap)
ファイル保存時のみチェックするようにする
入力中のコードチェックはやめて、ファイル保存時のみチェックしたい場合は下記設定を追加。
なお、ファイルオープン時のチェックも無効にできる。
let g:ale_lint_on_save = 1 let g:ale_lint_on_text_changed = 0 " ファイルオープン時にチェックしたくない場合 let g:ale_lint_on_enter = 0
ロケーションリストの代わりにQuickFixを使用する
ロケーションリストの代わりにQuickFixを使用する場合は下記設定を追加。
let g:ale_set_loclist = 0 let g:ale_set_quickfix = 1
エラーと警告の一覧を見るためにウィンドウを開いておきたい場合は下記設定を追加。
let g:ale_open_list = 1 " エラーと警告がなくなっても開いたままにする let g:ale_keep_list_window_open = 1
- 作者: DrewNeil,新丈径
- 出版社/メーカー: KADOKAWA / アスキー・メディアワークス
- 発売日: 2014/01/28
- メディア: Kindle版
- この商品を含むブログ (4件) を見る