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'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章