vi/vim使用进阶: 剑不离手 – quickfix
发布日期:2021-07-21 18:10:39 浏览次数:2 分类:技术文章

本文共 2318 字,大约阅读时间需要 7 分钟。

vi/vim使用进阶: 剑不离手 – quickfix  
<< 
本节所用命令的帮助入口:
:help quickfix:help :make:help 'makeprg':help 'errorformat':help 'switchbuf':help location-list:help grep:help :vimgrep:help :grep:help starstar-wildcard
以前读武侠小说,看到武林高手们都是从来剑不离手的。使用vim写程序,你也可以做到这一点,:-)
vim由一个程序员开发,而且为更多的程序员所使用,所以在vim中加强了对软件开发的支持,quickfix模式的引入就是一个例子。所谓quickfix模式,它和Normal模式、Insert模式没什么关系,它只是一种加快你开发速度的工作方式。
Quickfix模式的主要思想是保存一个位置列表,然后提供一系列命令,实现在这个位置列表中跳转。
位置列表的产生可以从编译器的编译输出信息中获得,也可以由grep命令的输出信息中获得,我们上篇文章所介绍的,也可以产生位置列表信息(:help ‘cscopequickfix’)。
[编译]
通常,我们在开发过程中,经常要写代码,编译,修改编译错误,这个过程会数十遍上百遍的重复。如果你是根据编译器输出的错误信息,打开出错的文件,找到出错的行,然后再开始修改,那效率未免太低下了。
利用vim的quickfix模式,可以大大加快这一过程,你可以在vim启动编译,然后vim会根据编译器输出的错误信息,自动跳到第一个出错的地方,让你进行修改;修改完后,使用一个快捷键,跳到下一个错误处,再进行修改,方便的很。
为了做到这一点,你首先要定义编译时所使用的程序,对大多数使用Makefile的项目来说,vim的缺省设置”make“已经可以满足要求了。如果你的项目需要用一个特殊的程序进行编译,就需要修改’makeprg‘选项的值。
大家在学编程时大概都读过”hello world”程序,我们就以这个简单的例子为例,讲一下quickfix模式的用法。
该程序的内容如下,里面包含了三个小小的错误:
/* hello world demo */#include
:w
:make
nmap
cn :cn
nmap
cp :cp
nmap
cw :cw 10
现在使用”,
“(先按,再按空格)就可以编译,使用”,cp“和”,cn“跳到上一个和下一个错误,使用”,cw“来打开一个quickfix窗口。这下顺手多了! 如果你希望跳转到出错的文件时,使用一个分隔的窗口打开,请参阅’switchbuf‘选项的值。 在vim7中,每个窗口都可以拥有自己的位置列表,这样,你就能够同时打开多个位置列表了,而quickfix列表在整个vim中只有一个。你可以使用位置列表来显示编译错误信息,具体命令参阅手册:”:help location-list“以及”:help :lmake“。 [GREP] 我们在中讲过,cscope可以做为一个快速的grep程序使用,对于我们的软件项目,用cscope生成一个数据库,可以大大加快查找字符串的速度。但cscope需要事先生成一个数据库,对一些简单的查找,不需要专门为之生成数据库,这时候可以使用grep。 Grep的名字来源于”g/re/p”,”re”是正则表达式(regex)的意思,”p”是打印,也就是把匹配正则表达式的行打印出来。 vim既可以使用外部的grep程序,也可以使用内部集成的grep功能。 使用集成的grep命令非常简单,通常使用格式为: :vimgrep /main/gj **/*.c 在上面的例子里,我们使用vim内部集成的grep功能,在当前目录及其子目录树的所有c文件中查找main字符串,如果一行中main出现了多次,每个匹配都计入;在查找到后,不立即跳转到第一个匹配的地方。 使用内部集成的grep功能速度要比外部grep慢一些,因为它会打开每个文件,对其进行检查,然后关闭;但集成的grep支持vim增强的正则表达式,可以利用它进行更为复杂的查找。它也支持vim扩展的文件通配符表示方式,见”:help starstar-wildcard“。 vimgrep查找到的结果,也会放在quickfix列表中。下图是在vim 7.0的源代码目录中执行上面的命令生成的quickfix列表: 我们可以使用上面介绍的quickfix模式的命令,来查看这些匹配。 你也可以用外部的grep程序来查找,如果你的系统中所用的不是标准的grep程序,那么就需要修改’grepprg‘选项,详情请参阅手册。 使用外部grep的语法与grep程序相同,请参阅grep的手册。 无论使用内部的vimgrep,还是使用外部的grep,vim都允许你将查找到的结果放在与窗口相关联的位置列表,要了解详细信息,”:help :lvimgrep“及”:help :lgrep“。 在我的vimrc中,定义下面的键映射,利用它可以在当前文件中快速查找光标下的单词: nmap
lv :lv /
=expand("
")
/ %
:lw
[参考文档] vim手册 <<  原创文章,请阅读页脚的,转载请注明:转载自 [  ] 本文链接地址: 

转载地址:https://blog.csdn.net/lsg32/article/details/8933885 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:OpenCv1.0 实现2副图像的拼接
下一篇:opencv图像修复算法cvInpaint(Telea的FMM算法)

发表评论

最新留言

不错!
[***.144.177.141]2024年04月02日 03时44分45秒