How to use the Syntastic Vim plugin with JSHint to validate JavaScript code?
Environment:
- Ubuntu 11.04
- VIM - Vi IMproved 7.3
What I have installed, following the solution at VIM + JSLint?:
- Vundle
- node.js
- Node Package Manager
- jshint, globally
- Syntastic installed through Vundle (Used the :BundleInstall command inside Vim to make sure Syntastic was installed.)
.vimrc:
set nocompatible " be iMproved
filetype off " required!
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle'
" My Bundles here:
Bundle 'scrooloose/syntastic'
filetype plugin indent on " required!
let g:syntastic_enable_signs=1
let g:syntastic_auto_jump=1
let g:syntastic_stl_format = '[%E{Err: %fe #%e}%B{, }%W{Warn: %fw #%w}]'
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
looking for installed executables:
$ which gjslint
$ which jslint
$ which jsl
$ which jshint
/home/fernando/local/node/bin/jshint
$
$ echo $PATH
>/home/fernando/local/bin:/home/fernando/local/node/bin:/home/fernando/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
$ jshint test.js
test.js: line 3, col 1, 'blbla' is not defined.
test.js: line 4, col 1, 'x' is not defined.
test.js: line 4, col 5, 'nonono' is not defined.
test.js: line 6, col 1, 'a' is not defined.
test.js: line 7, col 1, 'b' is not defined.
test.js: line 8, col 5, 'a' is not defined.
test.js: line 8, col 10, 'b' is not defined.
test.js: line 8, col 7, Expected '===' and instead saw '=='.8 errors
$ vi test.js -- no error message shown
:SyntasticEnable -- Vim exits and restarts, opening the same file, but still no message
:w -- still no error message
:Errors -- the location list opens but it is empty
Both jshint and Syntastic seem to be installed, but something is probably missing. What would it be?
I struggled with this issue for days and
SyntasticInfo
would not recognizejshint
as an available checker even after i addedlet g:syntastic_javascript_checkers['jshint']
to my.vimrc
. I am using Ubuntu 15.04 and I followed this tutorial to install nvm, nodejs, and jshint on Ubuntu. After I did that I discovered that if I removed the linefiletype plugin indent on
from my.vimrc
then opened a.js
file everything worked perfectly! To summarize...~/.nvm/<version_number>/bin
to path in.bashrc
filetype plugin indent on
from.vimrc
let g:syntastic_javascript_checkers['jshint']
to.vimrc
:so %
inside vim.js
filefiletype plugin indent on
back to your.vimrc
I just had this same problem. Turns out, Syntastic looks for
jsl
(JSLint) before it looks for jshint. If you have both installed, you'll likely be misled. I movedjsl
somewhere not in my PATH, and jshint was detected just fine.Source:
https://github.com/scrooloose/syntastic/pull/47
Here is a more updated info, there is a configuration to associate a file extension to a checker,
in your
.vimrc
Also to get info about what's going on run this command in vim
And you'll get an output similar to this: