eslint
和Neomake
:使用Neomake和Neovim编写代码
使用Neovim和Neomake编写代码-ESLint版本
所以我有以下最小
init.vim
call plug#begin('~/.vim/plugged')
Plug 'neomake/neomake'
call plug#end()
autocmd! BufWritePost,BufEnter * Neomake
let g:neomake_verbose=3
let g:neomake_open_list = 2
let g:neomake_javascript_enabled_makers = ['eslint']
" neomake
nmap <Leader><Space>o :lopen<CR> " open location window
nmap <Leader><Space>c :lclose<CR> " close location window
nmap <Leader><Space>, :ll<CR> " go to current error/warning
nmap <Leader><Space>n :lnext<CR> " next error/warning
nmap <Leader><Space>p :lprev<CR> " previous error/warning
问题是当我保存
Neomake
时挂起并显示以下消息:Neomake: Starting: eslint -f compact /home/otis/Developer/test/index.js
如果我在
nvim
之外手动运行该命令,例如:eslint -f compact /home/otis/Developer/test/index.js
我收到以下输出:
/home/otis/Developer/test/index.js: line 1, col 1, Error - Unexpected var, use let or const instead. (no-var)
/home/otis/Developer/test/index.js: line 1, col 5, Error - 'a' is defined but never used. (no-unused-vars)
/home/otis/Developer/test/index.js: line 1, col 9, Error - Strings must use singlequote. (quotes)
3 problems
这很好,这意味着
eslint
可以正常工作,但是我从Neomake
中什么都没得到。以下:我的
:lopen
/ vim
知识有些基础,因此请在回答中明确说明。#1 楼
注释中的一些[轻度编辑]信息:实际上,这可能是Quickfix窗口为空的原因。在运行
:lopen
时,在屏幕上投射时,由于BufEnter的autocmd,Neomake将为该缓冲区运行。此外,它应仅限于JavaScript文件:augroup neomake
au!
autocmd BufWritePost *.js Neomake
augroup END
#2 楼
这不能完全回答您的问题,但是我发现neomake与eslint_d一起使用效果更好。它有一个很好的副作用,那就是它也应该更快地完成lint。 /> .eslintrc
,然后将neomake的以下配置添加到您的
npm install -g eslint_d
/ init.vim
中:<对我来说,这是我所需要的,在重新启动neovim并打开一个运行
.vimrc
的javascript文件后,我便有了警告警告。
评论
尝试更改您的autocmd! BufWritePost,BufEnter * Neomake到augroup neomake / au!/ autocmd BufWritePost * Neomake / augroup END BufEnter没什么意义实际上,这可能是“快速修复”窗口为空的原因。当您运行:lopen时,在屏幕上投射的内容是由于BufEnter的autocmd而使Neomake对该缓冲区运行。 @Yonsy代码段很好,但应仅限于JavaScript文件:augroup neomake / au!/ autocmd BufWritePost * .js Neomake / augroup END