vim的quickfix模式

本文介绍如何使用Vim的快速修复模式来提高代码调试效率。通过设置编译程序和利用快速修复功能,Vim能自动跳转到错误发生的位置,帮助开发者逐个解决编译错误。
通常,我们在开发过程中,经常要写代码,编译,修改编译错误,这个过程会数十遍上百遍的重复。如果你是根据编译器输出的错误信息,打开出错的文件,找到出错的行,然后再开始修改,那效率未免太低下了。

利用vim的quickfix模式,可以大大加快这一过程,你可以在vim启动编译,然后vim会根据编译器输出的错误信息,自动跳到第一个出错的地方,让你进行修改;修改完后,使用一个快捷键,跳到下一个错误处,再进行修改,方便的很。

为了做到这一点,你首先要定义编译时所使用的程序,对大多数使用Makefile的项目来说,vim的缺省设置”make“已经可以满足要求了。如果你的项目需要用一个特殊的程序进行编译,就需要修改’makeprg‘选项的值。

大家在学编程时大概都读过”hello world”程序,我们就以这个简单的例子为例,讲一下quickfix模式的用法。

该程序的内容如下,里面包含了三个小小的错误:

<pre>
/* hello world demo */
#include <stdio.h"
int main(int argc, char **argv)
{
    int i;
    print("hello world\n");
    return 0;
} 
<\pre>

我们可以为这个程序写个小小的Makefile文件,不过为了演示makeprg的设置方法,我们并不用Makefile,而直接设置makeprg选项,如下:

<pre>
:set makeprg=gcc\ -Wall\ -o\ hello\ hello.c 
</pre>

上面的命令会把hello.c编译为名hello的可执行文件,并打开了所有的Warnning。如果编译命令中有空格,需要使用’\‘对空格进行转义,上面的例子就使用了’\‘转义空格。

我们设置好makeprg选项后,输入下面的命令就可以编译了:

我们修改一下main.c, 人为地造成几处错误, 在第1019行增加了一个baobao_wu的没有任何定义的字符串, 删除了第1020行最后的一个括号")", 然后用下面的命令进行编译:

:make

显然编译会报很多错误, 当编译结束并退出到源码界面时, 刚才编译器报的错误都已经看不到了, 但是我们可以用QuickFix窗口再将错误信息找出来, 用下面的命令调出QuickFix窗口:

:cw

此时你就可以看如下图所示的QuickFix窗口了: 


在使用:make时,vim会自动调用makeprg选项定义的命令进行编译,并把编译输出重定向到一个临时文件中,当编译出现错误时,vim会从上述临时文件中读出错误信息,根据这些信息形成quickfix列表,并跳转到第一个错误出现的地方。

对于我们上面的程序来说,光标会停在第三行,也就是第一个出错的位置,vim同时会提示出错信息。如果你没看清出错信息,可以输入”:cc“命令,vim会更次显示此信息,或者干脆使用”:cw“命令,打开一个quickfix窗口,把所有的出错信息显示出来。

现在我们知道错在哪儿了,修正一下,然后使用”:cn“命令(或者在Quickfix List对应行上输入回车)跳到下一个出错的地方,以此类推,直到修正全部错误。

好了,千辛万苦,我们的hello world终于工作了。乍一看这个例子,似乎Quickfix并没有提高什么效率,但如果你的错误出现在多个不同目录的不同文件里,它可以帮你省很多时间,使你可以集中精力在修正bug上。

vim可以同时记住最新的10个错误列表,也就是说你最近10次使用:make命令编译所遇到的错误都保存着,可以使用:colder:cnewer命令,回到旧的错误列表,或者到更新的错误列表。

在quickfix模式里经常用到的命令有:

  • :cc                显示详细错误信息 ( :help :cc )
  • :cp                跳到上一个错误 ( :help :cp )
  • :cn                跳到下一个错误 ( :help :cn )
  • :cl                列出所有错误 ( :help :cl )
  • :cw                如果有错误列表,则打开quickfix窗口 ( :help :cw )
  • :col               到前一个旧的错误列表 ( :help :col )
  • :cnew              到后一个较新的错误列表 ( :help :cnew ) 

更多的命令,以及这些命令更详细的解释,请参见手册。

对于经常用到的命令,最好提供更方便的使用方法,在我的vimrc中的定义:

在vim7中,每个窗口都可以拥有自己的位置列表,这样,你就能够同时打开多个位置列表了,而quickfix列表在整个vim中只有一个。你可以使用位置列表来显示编译错误信息,具体命令参阅手册::help location-list以及:help :lmake

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值