ハイパーマッスルエンジニア

Vim、ShellScriptについてよく書く

【Vim】aleでハイライトがされない問題の修正

f:id:rasukarusan:20210225160859p:plain

色がつかなくて困っていた

Lintを非同期実行できるプラグインのale。NeovimのVirtual Textにも対応していて、Lintエラーの文言を下記のように表示できる。

f:id:rasukarusan:20210225155306p:plain
Virtual TextでLintエラーを表示

上記画像では黄色でハイライトされているが、以前までハイライトがされなくて困っていた。let g:ale_set_highlights = 1にしてもつかなくてどうしたものかと思っていたが、先日解決策を見つけたので残しておく。

autocmdでALEWarning,ALEErrorを再設定すればいける

これで色がつくようになる。

autocmd VimEnter,SourcePost * :highlight! ALEError guifg=#C30500 guibg=#151515
autocmd VimEnter,SourcePost * :highlight! ALEWarning  guifg=#ffd300 guibg=#333333

highlight! ALEError guifg=...を設定すればいけるんじゃないかと思っていたが、それだけだとどうやら処理のどこかでclearに設定されてしまうっぽい。

f:id:rasukarusan:20210225155330p:plain
:highlight ALEErrorを実行してみるとclearになっていることがわかる
そもそもALEErrorをハイライト設定していないと、そんな定義ないよと怒られる。

なのでautocmdでファイルを開いたときまたは再読み込みしたときにhighlightを再定義すると、ちゃんと色がつく。
バグなのか他のプラグインやtmuxとの相性が悪いのか、原因は定かではないがIssueには一応上がっていた。

github.com

let g:ale_set_highlights = 1について

let g:ale_set_highlights = 1にすれば色がつくようになると思っていたが、そうじゃないらしい。g:ale_set_highlights実際のコードに色をつけるかどうか、の判定フラグだった。

f:id:rasukarusan:20210225155714p:plain
let g:ale_set_highlights = 1の場合
結構重くなってしまうので、0にした。

prettierやeslintも同じ

これは自分だけかもしれないが、ファイルを保存した際prettierで自動整形する、ということをaleで行っている。
自動整形はされるのだが、ファイルを一度再読み込みしないと発動されなかった。これもハイライトと同様でautocmdによって回避可能であった。

let g:ale_fix_on_save = 1
" vimrcを再読込みしないとfixersが未定義になってしまうため、autocmdで設定した
autocmd VimEnter,SourcePost * :let b:ale_fixers = ['prettier', 'eslint']

設定すると、再読み込みしなくても保存したら自動整形されるようになった。