Vim插件之ale

純粹個人記錄備份而已,如有錯誤,歡迎指正,更新於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這個文件,方法是打開上面提到的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'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章