如何使用 vim 的快速修复功能?

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

然而,我不知道接下来该怎么办。.如何“滚动”所有错误?如何关闭快速修复的“窗口”?我如何让它检查错误后,我已经改变了我的代码?

我已经看过 vim 快速修复文档,但是命令的数量太多了,我似乎找不到我想要的。如果你能帮忙,我将不胜感激。

附带问题: 有没有办法让 javascriptlint 检查驻留在。Html 文件?

97606 次浏览

正如你所说,有很多 命令用于快速修复,但我倾向于发现我只使用其中的一小部分:

: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 lint 检查器进行注释,但是这应该会给您一些启动资料。

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

autocmd BufWritePost,FileWritePost *.html call JavascriptLint()

让它自动化。如果 jsl不支持 html 文件,那么(除了修补应用程序或要求作者更改它) ,这可能是一个失败的原因..。

该快速修复窗口的操作方式与其他 vim 窗口大致相同: j 下一行,k 上一行,: cn 跳转到下一个错误/警告,等等。

实验!

在这种情况下,还可以使用 :cc 2(或任何其他数字)跳转到快速修复窗口中的第二个错误。使用 :cn:cc 4等导航将把光标放在有问题的线上。

集成 JavaScript 语法检查的最佳实践方法是使用 < em > Syntastic Vim 插件,它使用 Vim 的 位置列表(与 速战速决并行)窗口。

我已经为 这个问题这个问题写了答案,解释了如何做到这一点,以及如何使用社区驱动的 Jshint.com(比 JSLint IMO 好得多)和 Mozilla 的 译自: 美国《科学》杂志网站(http://DoctorJS)(以前的 Jsctag)为 Vim 获得 源代码浏览/标记列表

浏览快速修复列表(或位置列表)的最简单方法是 unimpaired插件

一旦快速修复窗口被填充,[q]q将在快速修复列表中前进和后退(分别)。[Q]Q从头到尾(如果列表中只有一个项目,这就特别方便; 这使得 vim 抱怨 [q]q)。所以工作流程是:

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

如果您使用 Syntastic,您将获得位置列表,而不是快速修复列表。没有问题,只需以同样的方式使用 [L]L[l]l

unimpaired还有很多其他方便的映射—— [e]e上下“气泡”线,[<Space>]<Space>上下插入空白线等等。我很惊讶之前没有人在这里提到它; 这可能是因为它直到2010年1月才存在,尽管这个问题是在2009年提出的。

也许这个选项在写这个问题的时候并不存在(或者我让自己很尴尬,因为在我的 .vimrc中有一些东西使这种情况发生) ,但是当我得到一个 Quickfix List,我只是用 jk导航它,然后按 <CR>(也就是回车键)跳到文件中的那个位置。

然后,为了返回到 Quickfix List,我输入 Ctrl + W j表示“向下移动一个窗口”,然后返回。

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

在.vimrc 文件中放入以下两行:

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

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

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

下面每组3个文件表示一组快速修复结果,例如来自 vimgrep 的结果。Cnew 和 cold 用于遍历历史结果集。 enter image description here

尽管这需要 > Vim 7.4.858,cdo (或 ldo 用于位置列表)命令允许以只能使用 sed 的方式更新一组非连续的行:

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

上面显示了运行记录的宏或简单的搜索和替换。缺失似乎是一种通过管道和外部命令的方式,就像使用 :range! command一样