Vim外掛之ale
阿新 • • 發佈:2018-12-14
純粹個人記錄備份而已,如有錯誤,歡迎指正,更新於2018/5/13
ale(Asynchronous Lint Engine)是一款語法檢查的外掛,與syntastic類似,但有兩個明顯的優勢,一個是語法檢查是非同步執行的,因此基本上不會出現卡頓的情況,另外一個是ale預設會使用所有檢查工具併發
的進行檢查,但它只支援Vim 8.0以上的版本,配置如下
"ale
"始終開啟標誌列
let g:ale_sign_column_always = 1
let g:ale_set_highlights = 0
"自定義error和warning圖示
let g:ale_sign_error = '✗'
let g:ale_sign_warning = '⚡'
" 在vim自帶的狀態列中整合ale
let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
"顯示Linter名稱,出錯或警告等相關資訊
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%]'
"普通模式下,sp前往上一個錯誤或警告,sn前往下一個錯誤或警告
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>s觸發/關閉語法檢查
nmap <Leader>s :ALEToggle<CR>
" <Leader>d檢視錯誤或警告的詳細資訊
nmap <Leader>d :ALEDetail<CR>
需要注意的是要上面的狀態列整合只是整合到Vim自帶的狀態列上,而且必須在狀態列設定%{ALEGetStatusLine()}
,比如我的狀態列設定為
"設定狀態列顯示的內容
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}\ %{ALEGetStatusLine()}
如果你有使用airline的話,會發現airline預設也能顯示ale相關的symbol,error對應的是”E”,warning對應的是”W”,如果你想把自定義的error和warning圖示整合到airline的話,需要修改~/.vim/plugged/vim-airline/autoload/airline/extensions/ale.vim
let s:error_symbol = get(g:, 'airline#extensions#ale#error_symbol', 'E:')
let s:warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', 'W:')
然後再新增下面這兩句就可以了
let s:error_symbol = get(g:, 'airline#extensions#ale#error_symbol', '✗ ')
let s:warning_symbol = get(g:, 'airline#extensions#ale#warning_symbol', '⚡ ')
實時的語法檢查,有時候挺煩人的,如果希望只在儲存檔案時才執行Linters,可以像下面這樣設定
"檔案內容發生變化時不進行檢查
let g:ale_lint_on_text_changed = 'never'
"開啟檔案時不進行檢查
let g:ale_lint_on_enter = 0
另外,你還可以指定某種語言特定的Linter,比如對於C/C++我都是使用clang,那麼就可以像下面這樣配置
"使用clang對c和c++進行語法檢查,對python使用pylint進行語法檢查
let g:ale_linters = {
\ 'c++': ['clang'],
\ 'c': ['clang'],
\ 'python': ['pylint'],
\}
另外,對於Java如果安裝在中文的系統上,錯誤和警告資訊都會亂碼,可以進行下面的設定
let g:ale_java_javac_options = '-encoding UTF-8 -J-Duser.language=en'