Vim之代码异步检测插件 ALE
前言
知名的 vim 代码检测插件主要是两个segmentfault
- syntastic
- neomake
- ALE
ALE 虽是后起之秀,但目前是功能最强大的一个bash
- 实时检测。为了让代码能够在编辑时进行实时的检测,ale 的运行方式是将代码作为 stdin 导入检测工具(不支持的话使用临时文件),这样作的好处是咱们能够更早的发现错误。
- 并发运行。ale 默认使用全部可用的检测工具并发执行检测,譬如说咱们有时须要同时对 javascript 运行 eslint 以及 jscs。
- 标识栏、状态栏以及命令行消息支持。
安装
Vim 8 on Unix
mkdir -p ~/.vim/pack/git-plugins/start git clone https://github.com/w0rp/ale.git ~/.vim/pack/git-plugins/start/ale
NeoVim on Unix
mkdir -p ~/.local/share/nvim/site/pack/git-plugins/start git clone https://github.com/w0rp/ale.git ~/.local/share/nvim/site/pack/git-plugins/start/ale
Vim 8 on Windows
## Run these commands in the "Git for Windows" Bash terminal mkdir -p ~/vimfiles/pack/git-plugins/start git clone https://github.com/w0rp/ale.git ~/vimfiles/pack/git-plugins/start/ale
Vundle
把下面行加入到,vimrc
Plugin 'w0rp/ale'
Linter
ale 的 linter 都要本身安装
还好系统通常都是有 gcc, python, gofmt 之类的
须要额外安装的大约有
- vint: vimscript
- mdl: markdown
- iverilog: verilog
vint
安装方法以下:
pip3 install vim-vint
mdl
安装方法以下:
gem install mdl
iverilog
安装 gperf, 下载源码: 连接
./configure && make && make install
下载 iverilog 源码:
git clone https://github.com/steveicarus/iverilog.git cd iverilog ./autoconf.sh ./configure && make && make isntall
配置使用
"----------------------------------------------------------------------------- " plugin - ale.vim "----------------------------------------------------------------------------- "keep the sign gutter open let g:ale_sign_column_always = 1 let g:ale_sign_error = '>>' let g:ale_sign_warning = '--' " show errors or warnings in my statusline let g:airline#extensions#ale#enabled = 1 " self-define statusline "function! LinterStatus() abort " let l:counts = ale#statusline#Count(bufnr('')) " " let l:all_errors = l:counts.error + l:counts.style_error " let l:all_non_errors = l:counts.total - l:all_errors " " return l:counts.total == 0 ? 'OK' : printf( " \ '%dW %dE', " \ all_non_errors, " \ all_errors " \) "endfunction "set statusline=%{LinterStatus()} " echo message " %s is the error message itself " %linter% is the linter name " %severity is the severity type " 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%]' " use quickfix list instead of the loclist let g:ale_set_loclist = 0 let g:ale_set_quickfix = 1 " only enable these linters "let g:ale_linters = { "\ 'javascript': ['eslint'] "\} nmap <silent> <C-k> <Plug>(ale_previous_wrap) nmap <silent> <C-J> <Plug>(ale_next_wrap) " run lint only on saving a file " let g:ale_lint_on_text_changed = 'never' " dont run lint on opening a file " let g:ale_lint_on_enter = 0 "------------------------END ale.vim--------------------------------------
效果
可看到由于第69,70,71, 73行的几个模块定义没有提供,因此左边线上有红色的>>
把光标定位到73行, 在下面命令行会给出具体的错误:
Unknown module type: pmu
总结
ALE能够让你一边编码一边实时检查代码的语法问题,同时还彻底不影响vim的性能。这能够极大提高你代码输写的正确性。