我一直按照以下两个教程尝试设置eslintNeomake


使用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知识有些基础,因此请在回答中明确说明。

评论

尝试更改您的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

#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文件后,我便有了警告警告。