總之就是非同步的語法檢查
注意若要用vim,版本只少要8喔
安裝因為vundle所以簡單
Plugin 'w0rp/ale'然後:PluginInstall
基本設定
let g:ale_sign_column_always = 1 let g:ale_linters = { \ 'javascript': ['eslint'], \ 'c': ['clang'], \ 'cpp': ['clang'], \ 'python': ['pylint'] \} let g:ale_statusline_format = ['E:%d', 'W:%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%]' let g:ale_lint_on_enter = 1 let g:ale_set_signs = 1 let g:ale_sign_error = '◈' let g:ale_sign_warning = '◈'
設定error跟warning的圖示都是◈比較不會亂,用顏色分就好
ALEErrorSign、ALEWarningSign:行數前的錯誤警告符號
ALEError、ALEWarning:發生錯誤警告的位置
ALEErrorLine、ALEWarningLine:發生錯誤警告整行
所以再加入,想要粗體也可以把NONE換成bold,前景背景也都任意
autocmd VimEnter,Colorscheme * :hi ALEErrorSign cterm=bold ctermfg=160 autocmd VimEnter,Colorscheme * :hi ALEWarningSign cterm=bold ctermfg=166 autocmd VimEnter,Colorscheme * :hi ALEErrorLine cterm=NONE ctermfg=251 ctermbg=160 autocmd VimEnter,Colorscheme * :hi ALEError cterm=NONE ctermfg=251 ctermbg=160 autocmd VimEnter,Colorscheme * :hi ALEWarning cterm=NONE ctermfg=251 ctermbg=166
與airline溝通部分,必須先enable
let g:airline#extensions#ale#enabled = 1
----106.07.20更新----
下面那一大堆在最新版本的 airline 可不用使用
上面enable之後就會自動偵測warning跟error區域
發現我電腦上的版本無 ale 這個 extension 而 GitHub 上有
我太久沒 :PluginUpdate 了,我的錯QuQ
加這兩行設定符號即可像下下張圖一樣了
let airline#extensions#ale#error_symbol = 'E' let airline#extensions#ale#warning_symbol = 'W'----我是分隔線喔----
然後通常用這行即可,比較簡單
let g:airline_section_warning = '%{ALEGetStatusLine()}'不過結果會如下
但是我發現airline有提供warning跟error兩塊
所以就又耗了一整個下午
目前結果如下
上面那行先改成這樣
let g:airline_section_error = '%{ALEGetError()}' let g:airline_section_warning = '%{ALEGetWarning()}'接著因為ALEGetError()、ALEGetWarning()不是ale內建的,所以要自己刻
其中的'ok'、'E'、'W'、'E0'、'W0'都是字串可自行修改
function! ALEGetError() let l:res = ale#statusline#Status() if l:res ==# 'ok' return '' else let l:e_w = split(l:res) if len(l:e_w) == 2 || match(l:e_w, 'E') > -1 return 'E' . matchstr(l:e_w[0], '\d\+') else return 'E0' endif endif endfunction function! ALEGetWarning() let l:res = ale#statusline#Status() if l:res ==# 'ok' return '' else let l:e_w = split(l:res) if len(l:e_w) == 2 return 'W' . matchstr(l:e_w[1], '\d\+') elseif match(l:e_w, 'W') > -1 return 'W' . matchstr(l:e_w[0], '\d\+') else return 'W0' endif endif endfunction
一切都很棒
唯一缺點就是airline那兩塊背景前景不管我怎麼查就是不能換=''=
如果可以請通知我!!!!
----106.07.16更新----
解決了,然後我重新做一個主題了OuO
可參考106.07.16 vim airline warning section highlight
參考資料:
liuchengxu/space-vim配置
w0rp/ale » Statusline should turn to green when no errors are found
Vimメモ : ALE(Asynchronous Lint Engine)で非同期コードチェック
ale/doc/ale.txt
vim-airline/doc/airline.txt
用 Vim 写 Python 的最佳实践
Asynchronous Lint Engine - Vim Plugin | How-to | Editor 編輯者 #3
沒有留言:
張貼留言