您如何使用vim的quickfix功能?


125

我是一个非常新的Vim用户,我发现它的学习曲线相当陡峭(至少对我而言)。我刚刚安装了这个用于JavaScriptLint错误检查的vim脚本,一旦保存缓冲区,该脚本就会在vim的quickfix窗口中显示错误。

但是,我不知道下一步该怎么做。如何滚动所有错误?如何关闭快速修复程序“窗口”?更改代码后,如何获取它以检查错误?

我看过vim quickfix文档,但是命令数量不胜枚举,我似乎找不到我想要的东西。任何帮助,将不胜感激。

附带问题:有什么方法可以让javascriptlint检查驻留在.html文件中的代码的js错误吗?

谢谢!

Answers:


148

如您所说,有很多用于quickfix 的命令,但是我倾向于发现我只使用其中的一小部分:

: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)

我倾向于将其与:make和一起使用:vimgrep,因此无法在Javascript皮棉检查器中进行评论,但这应该为您提供了一些入门知识。

关于JavascriptLint的一般用法,我不是JavaScript程序员,但是该脚本似乎公开了一个名为“ JavascriptLint”的函数,因此,如果要手动调用它,可以使用:call JavascriptLint()。但是,它可以在文件的磁盘副本上使用,因此必须首先保存。如果(且仅当)命令行在jslhtml文件上有效,则您应该能够:call JavascriptLint()在html文件上使用以检查内部javascript。您也可以这样做:

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

使其自动化。如果jsl不支持html文件,则(缺少修补应用程序或要求作者对其进行更改),可能是一个丢失的原因...


谢谢,这些命令是一个好的开始,我只需要花一点时间来适应它的工作原理。如果我使用:cn在qf窗口中出错,是否可以在不退出qf窗口的情况下使用代码跳转到该窗口?它可以跳到有错误的行吗?和您的建议使用:call的作品,但它遵循<script src>链接,这不是我想要的。
hora

@hora::cn不应该关闭qf窗口,但是它将切换到包含错误的窗口:这是“跳”的意思吗?您可以使用Ctrl-W p或来快速切换回去:wincmd p,因此可以执行:command! CN :cn | wincmd p<CR>类似操作(未经测试)。这应该给您一个:CN命令,该命令将转到下一个错误,而无需切换到quickfix窗口。或者,您可以执行类似的操作:au BufWinEnter quickfix nmap <buffer> <Enter> :.cc | wincmd p<CR>(再次未经测试),然后使用Enter键选择错误,而无需退出quickfix窗口。
DrAl

1
对于初学者来说,“您也可以:'somecodehere'使其自动化”并不重要。这意味着所显示的代码行必须放置在〜/ .vimrc中(在Windows AFAIK上为_VIMRC),并且从VIM的下一次启动开始,每次保存文件时都会调用此命令。对?
Беров

63

导航quickfix列表(或位置列表,对于这个问题)最简单的方法是unimpaired插件

一旦quickfix窗口被填充,[q并且]q去前进和后退(分别)在quickfix列表。 [Q然后]Q转到开头和结尾(如果列表中只有一项,这将特别方便;这会使vim抱怨[q]q)。因此,工作流程为:

  1. 运行填充快速修复列表的任何命令
  2. 键入[Q以转到第一项
  3. 通过后续项目滚动(如有)[q]q

如果您使用Syntastic,则会获得位置列表,而不是快速修复列表。没问题; 刚刚使用[L]L[l,并]l以同样的方式。

unimpaired有其他方便的映射的负荷过- [e]e“泡沫”行上下,[<Space>]<Space>插入空行上方和下方,等等。我很惊讶没有人在此之前提到; 这可能是因为直到2009年才提出这个问题,直到2010年1月才存在。


27

将以下两行放入您的.vimrc文件中:

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

现在,您可以使用ctrl-j和ctrl-k来浏览错误,它们模拟了标准的上下运动命令j和k。


1
<c-j>某个时候(取决于终端?!)是错误的或完全不工作,因为这意味着相同<NL> //最简单的IST,以使用<c-n><c-p>代替//否则:stackoverflow.com/questions/8304421/...
eli

我决定使用F8和F9,就像这样:noremap <F7> :cprevious<CR>noremap <F8> :cnext<CR>.vimrc
Flimm

我已经使用<C-j><C-k>VIM分裂和TMUX窗格与之间导航VIM TMUX导航。组合<C-M-j><C-M-k>可能是替代方案。
Paul Rougieux

24

:cc 2在这种情况下,您也可以使用(或任何其他数字)跳转至quickfix窗口中的第二个错误。用:cn:cc 4等导航,将光标放在有问题的行上。



8

也许这个选项是不存在的,当这个问题被写(因为有东西或也许我自己难堪我.vimrc认为使这种情况发生),但是当我得到一个Quickfix List,我只是浏览它jk然后打<CR>(即回车键)跳到文件中的那个位置。

然后,返回到Quickfix List我键入Ctrl+ W j的“向下移动窗口”,然后我又回来了。

最后,完成后,我只需键入:q,就像我将关闭任何普通窗口一样。


那就是我想做的,但是我得到“无法进行更改,'可修改'已关闭”。
rtf

1
您可能已经覆盖了Enter键。例如nmap <CR> o<Esc>,我有,所以我可以在普通模式下添加换行符。
Taavi Ilves

6

quickfix窗口的操作几乎与任何其他vim窗口一样:j向下一行,k向上一行,:cn跳转到下一个错误/警告,等等。

实验!


1
+1做实验,这几乎就是我学到的一切。
hora

4

除了有关如何打开和关闭快速窗口以及在条目之间进行导航的@DrAl很好的答案之外,我还制作了一个图像来显示其他一些快速修复导航命令。

以下每组3个文件代表一组快速修复结果,例如来自vimgrep的结果。更新和更冷是为了经历历史结果集。 在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.