纯粹个人记录备份而已,如有错误,欢迎指正,更新于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 (ale_previous_wrap)
nmap sn (ale_next_wrap)
"s触发/关闭语法检查
nmap s :ALEToggle
" d查看错误或警告的详细信息
nmap d :ALEDetail
需要注意的是要上面的状态栏整合只是整合到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'