How do you use vim's quickfix feature?

VimJslint

Vim Problem Overview


I'm a pretty new Vim user and I've found that its learning curve is quite steep (at least for me). I just installed this vim script for JavaScriptLint error checking, which shows errors in vim's quickfix window once I save a buffer.

However, I don't know what to do next.. How do I 'scroll' through all the errors? How do I close the quickfix 'window'? How do I get it to check for errors after I've made changes to my code?

I've looked at the vim quickfix docs but the amount of commands are overwhelming and I can't seem to find what I want. Any help would be appreciated.

A side question: is there any way to have javascriptlint check for js errors for code residing in a .html file?

Vim Solutions


Solution 1 - Vim

There are a lot of commands for quickfix as you have said, but I tend to find I only use a small subset of them:

:copen " Open the quickfix window
:ccl   " Close it
:cw    " Open it if there are "errors", close it otherwise (some people prefer this)
:cn    " Go to the next error in the window
:cp    " Go to the previous error in the window
:cnf   " Go to the first error in the next file
:.cc   " Go to error under cursor (if cursor is in quickfix window)

I tend to use this with :make and :vimgrep, so I can't comment on the Javascript lint checker, but this should give you something to get started.

Regarding the general use of JavascriptLint, I'm not a javascript programmer, but it looks like the script exposes a function called "JavascriptLint", so if you want to call it manually, you can use :call JavascriptLint(). However, it works on the disk copy of the file, so it'll have to be saved first. If (and only if) the command line jsl works on html files, you should be able to use :call JavascriptLint() on an html file to check the internal javascript. You could also do:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

to automate it. If jsl doesn't support html files, then (short of patching the application or asking the author to change it), it's probably a lost cause...

Solution 2 - Vim

The easiest way to navigate the quickfix list (or the location list, for that matter) is the unimpaired plugin.

Once the quickfix window is populated, [q and ]q go forward and back (respectively) in the quickfix list. [Q and ]Q go to the beginning and end (which is especially handy if you only have one item in the list; this makes vim complain about [q and ]q). So the workflow is:

  1. Run whatever command populates the quickfix list
  2. Type [Q to go to the first item
  3. Scroll through subsequent items (if any) with [q and ]q

If you're using Syntastic, you'll get the location list instead of the quickfix list. No problem; just use [L, ]L, [l, and ]l in the same way.

unimpaired has loads of other handy mappings too -- [e and ]e "bubble" lines up and down, [<Space> and ]<Space> insert blank lines above and below, etc. I was surprised nobody mentioned it here before; that's probably because it didn't exist until January 2010, though the question was asked in 2009.

Solution 3 - Vim

Put the following two lines in your .vimrc file:

map <C-j> :cn<CR>
map <C-k> :cp<CR>

Now you can navigate through the errors using ctrl-j and ctrl-k, which mimics the standard down and up motion commands j and k.

Solution 4 - Vim

You can also use :cc 2 (or any other number) to jump to, in this case, the second error in the quickfix window. Navigating with :cn, :cc 4, etc will put the cursor on the line in question.

Solution 5 - Vim

In addition to @DrAl great answer about how to open and close the quick window and navigate between entries, I made an image toshow some of the other quick fix navigation commands.

Each group of 3 files below represents a set of quickfix results, e.g. from a vimgrep. cnewer and colder are for going through historic result sets. enter image description here

Solution 6 - Vim

The best-practice way of integrating JavaScript syntax-checking is using the Syntastic Vim plugin, which is using Vim's location-list (which is parallel to the quickfix) window.

I've written answers for this question and this question explaining how to do it, plus also how to get source-code browsing / tag-list for Vim using the community-driven jshint.com (which is way better than JSLint IMO) and Mozilla's DoctorJS (formerly jsctags).

Solution 7 - Vim

Maybe this option didn't exist when this question was written (or maybe I'm embarrassing myself because there's something in my .vimrc that makes this happen) but when I get a Quickfix List, I just navigate it with j and k then hit <CR> (i.e. the Enter key) to jump to that place in the file.

Then, to get back to the Quickfix List I type Ctrl+W j for "move down a window" and I'm back.

Finally, when I'm done, I just type :q, like I would to close any normal window.

Solution 8 - Vim

the quickfix window is operated mostly like any other vim window: j down a line, k up a line, :cn to jump to the next error/warning, etc.

experiment!

Solution 9 - Vim

Although this requires > Vim 7.4.858, the cdo (or ldo for location lists) command allows updating a non-contiguous set of lines in a way you could once only do with sed:

:vimgrep /re/ %:p
:cdo! norm @a
# or
:cdo! s/re/repl/

The above shows running a recorded macro or a simple search and replace. Missing seems to a be a way to pipe through and external command as you can with :range! command

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionhoraView Question on Stackoverflow
Solution 1 - VimDrAlView Answer on Stackoverflow
Solution 2 - VimChip HoggView Answer on Stackoverflow
Solution 3 - VimAmit MoscovichView Answer on Stackoverflow
Solution 4 - VimAndy StewartView Answer on Stackoverflow
Solution 5 - Vimrun_the_raceView Answer on Stackoverflow
Solution 6 - VimOry BandView Answer on Stackoverflow
Solution 7 - VimLondonRobView Answer on Stackoverflow
Solution 8 - Vimjust somebodyView Answer on Stackoverflow
Solution 9 - VimchipfallView Answer on Stackoverflow