Setting up Vim for React.js

React.js is gaining a lot of traction lately, but developing with its inline-XML-in-JS requires a few tweaks to Vim for a smooth experience.

Syntax highlighting

To get the syntax highlighting to look right, use mxw's Vim JSX highlighting.

If you use Vundle, add:

Plugin 'mxw/vim-jsx'

Other plugin loaders, see the GitHub page.

If you use JSX syntax in .js files, which is now becoming standard, add:

let g:jsx_ext_required = 0 " Allow JSX in normal JS files

to your vimrc.

Syntax checking

If you use Syntastic, you'll notice immediate errors wherever XML nodes appear, which is to be expected. Here's a work around.

Update 3/30/15: I've added instructions on using ESLint instead of the old wrapper package.

Install eslint, babel-eslint (for ES6 support), and eslint-plugin-react:

npm install -g eslint
npm install -g babel-eslint
npm install -g eslint-plugin-react

Create a config like this in your project's .eslintrc, or do so globally by placing it in ~/.eslintrc:

{
    "parser": "babel-eslint",
    "env": {
        "browser": true,
        "node": true
    },
    "settings": {
        "ecmascript": 6,
        "jsx": true
    },
    "plugins": [
        "react"
    ],
    "rules": {
        "strict": 0,
        "quotes": 0,
        "no-unused-vars": 0,
        "camelcase": 0,
        "no-underscore-dangle": 0
    }
}

Finally, configure Syntastic to use ESLint:

let g:syntastic_javascript_checkers = ['eslint']

You should be good to go, and JSX with ES6 features will syntax check correctly! See this issue for more info.

Old way:

If you haven't already, install JSHint and react-tools:

npm install -g react-tools
npm install -g jshint

Install this little wrapper package I created:

npm install -g syntastic-react

This wrapper will run jsx, check for errors, then pass through JSHint for syntax checking of the transformed code.

To use it, add this to your vimrc:

let g:syntastic_javascript_checkers = ['jsxhint']
let g:syntastic_javascript_jsxhint_exec = 'jsx-jshint-wrapper'

After that, you should be good to go. Let me know if you run into any trouble or have any questions.