Javascript React
Writing Prettier JavaScript in Vim
JavaScript is an incredibly powerful and fickle language. In the face of quickly evolving frameworks and tooling, it can be cognitively challenging to grapple even with a familiar codebase. Even just having one less thing to think about goes a long way in helping us deal with the rest. Figuring out how to format each line of code is accidental complexity and one less thing we ought to think about.
As Brian Dunn put it, "Once you stop formatting your code, life becomes beautiful." And so does your code, but without any of the effort.
This is where Prettier comes in.
At Hashrocket, Vim is an essential part of our development tooling.
neoformat
makes it easy to
incorporate prettier
into our existing workflow. As you can see in the
above gif, Prettier formats the file on save.
Here is how we set it up.
Step 1
Install prettier
if you haven't already.
$ yarn global add prettier
(or npm install -g prettier
if you prefer)
Step 2
Install the neoformat
vim plugin.
" ~/.vimrc
Plug 'sbdchd/neoformat'
This plugin is a general-purpose formatter that can be configured to work across many filetypes. You can check out the repository README for the full list of supported filetypes.
Step 3
Next we need to configure Neoformat to use Vim's formatprg
as its
formatter.
let g:neoformat_try_formatprg = 1
This way in the following step we can specify some options for prettier
.
Step 4
We want neoformat
to be configured specifically to format our JavaScript
files with prettier
using a few configuration flags of our choosing. We
can set up an autogroup in our ~/.vimrc
file for that.
" ~/.vimrc
augroup NeoformatAutoFormat
autocmd!
autocmd FileType javascript setlocal formatprg=prettier\
\--stdin\
\--print-width\ 80\
\--single-quote\
\--trailing-comma\ es5
autocmd BufWritePre *.js Neoformat
augroup END
The FileType
line sets prettier
as the format program whenever a
javascript
file is encountered. formatprg
will provide the file contents
to prettier
via stdin
, so the --stdin
flag tells prettier
to expect
as much. The --print-width
flag tells prettier
to keep lines under 80
characters. And so on. The rest of the details are in the
Options section of the
Prettier README.
Step 5
We work on a lot of React.js projects, so having support for JSX is
essential. The time it takes to reformat long lines of JSX means that we can
feel the time savings quite acutely when prettier
does the formatting for
us.
To accommodate React, we can update our existing autogroup by adding support
for the jsx
filetype. This requires that you already have the
vim-jsx
plugin installed.
" ~/.vimrc
augroup NeoformatAutoFormat
autocmd!
autocmd FileType javascript,javascript.jsx setlocal formatprg=prettier\
\--stdin\
\--print-width\ 80\
\--single-quote\
\--trailing-comma\ es5
autocmd BufWritePre *.js,*.jsx Neoformat
augroup END
All Set
Give this setup a try and enjoy some consistent, well-formatted code. Forget about the formatting and focus on the function.
Shoutout to Dorian Karter for introducing me to Prettier in Vim.
Cover photo by JOHN TOWNER on Unsplash