⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 quickfix.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 3 页
字号:
5.3 用 :grep 浏览源代码使用 Vim 保存的错误列表,你可以查找某些函数或是其调用的其它函数。举个例子,如果你要对read_file 函数添加一个参数,可以输入下面的命令: >	:grep read_file *.c你可以用 ":cn" 在一系列匹配中跳转,然后加上所需要的参数。在某个地方,你需要从上层函数 msg() 得到这个新的参数,并要对它做出修改: >	:grep msg *.c在修改 msg() 函数的同时,你又找到另一个需要从上层函数中获得该参数的函数。你可以用 ":grep" 命令找到这些函数。当完成一个函数后,你可以用: >	:colder来跳转到上一个函数。这就像浏览一个树一样,":grep" 每深入一层,就创建新的分支。":colder" 跳转到上一层。你可以混和使用 ":grep" 和 ":colder" ,以树型方式来浏览所有的位置。如果经常这么做,你不需写一个 "todo" 列表就能找到所有的位置。=============================================================================6. 选择编译器						*compiler-select*							*:comp* *:compiler*:comp[iler] {name}		为 {name} 编译器设定相关选项。				{如编译时没指定 |+eval|,则此命令不可用}这个命令实际上做的是:- 删除 "current_compiler" 变量				*current_compiler*- 执行 ":runtime! compiler/{name}.vim"如要编写编译器插件,请参考 |write-compiler-plugin|。MANX AZTEC C				*quickfix-manx* *compiler-manx*要使 Vim 和 Amiga 上的 Manx Aztec C 编译器工作,需要以下步骤:- 设定 CCEDIT 环境变量: >	mset "CCEDIT=vim -q"- 用 -qf 选项编译。如果编译器发现任何错误,Vim 被启动,光标定位在首个错误处。  错误信息会在最后一行显示。你可以用上面提到的命令跳转到其它的错误,对其修定并  存盘。- 如果正常退出 Vim,编译器会再次编译相同文件。如果用 :cq 命令退出,编译器就会  终止。如果不能修定错误或是需要先编译其它的文件,你可以这样做。在 Amiga 系统上,QuickFix 模式会有某些限止。编译器只能在错误文件中写入前 25 个错误(Manx 的文档没有说明怎样才能写入更多)。如果想查找其它的错误,你需要首先修定一些错误并退出编译器。重新编译后,剩下的错误 (最多 25 个)就会找到。如果 Vim 是在编译器中启动的,:sh 和 一些 :! 命令不能工作,因为 Vim 是和编译器在同一个进程中运行而 stdin (标准输入 )也不在交互状态。PYUNIT 编 译 器						*compiler-pyunit*这其实不是一个编译器,而是一个为 Python 语言而设的单元测试工具。从版本 2.0 起,它就在标准的 Python 发布中。对老版本,你可以在这里获得:http://pyunit.sourceforge.net 。当你运行测试时,Vim 会解析错误并进入到 quick-fix 模式。不幸的是,没有一个运行测试的标准方法。一般都会用使用 alltest.py。有关 'makeprg' 选项就可以这样设定: setlocal makeprg=./alltests.py " Run a testsuite setlocal makeprg=python %      " Run a single testcase另外,参考 http://vim.sourceforge.net/tip_view.php?tip_id=280.TEX 编 译 器						*compiler-tex*Vim 发布版本中的 Tex 编译器 ($VIMRUNTIME/compiler/tex.vim) 可以处理各种风格的TeX 格式。如果变量 b:tex_flavor 或 g:tex_flavor 存在,它将为 :make (即为所要运行的命令)定义 TeX 风格;如果这两个变量都不存在,将会使用省缺的 "latex"。比如,要编辑从 AMS-TeX 上 mypaper.tex \input-ed 而来的 chapter2.tex: >	:let b:tex_flavor = 'amstex'	:compiler tex<	[editing...] >	:make mypaper注意,你须要将所处理文件的文件名作为参数(以在编辑 \input-ed 或 \include-ed文件时能处理正确的文件)。这不是 make 的语义,但你可以指定不含扩展名 ".tex" 的文件名。使用到的变量:b:tex_ignore_makefile 或 g:tex_ignore_makefile  通常,如果当前目录存在 'Makefile' 或 'makefile' ,这将被视作用户想要用 make  处理 *TeX 文件的信号。如果你不想这样,可以在运行 :compiler tex 前设定上面的  两个变量之一。b:tex_flavor 或 g:tex_flavor  省缺的,编译器会认为你使用 LaTeX 并用 "latex" 运行它。如果你的情况不是这样,  可以将 b:tex_flavor 或 g:tex_flavor 设定为你所要运行的命令名。Note: latex 命令行格式对 MikTeX 和 teTeX 都适用。要使 :help errorformat-LaTeX上的建议对不同 shell 不同 OS 都适用太过复杂,因此不允许使用其它的 TeX 的选项。如果你的 TeX 不支持 "-interaction=nonstopmode",请在命令行中用其它的方式表示\nonstopmode。=============================================================================7. 错误格式						*error-file-format*					*errorformat* *E372* *E373* *E374*						*E375* *E376* *E377* *E378*'errorformat' 选项指定可识别出的一系列格式。首个匹配的格式会被使用。你可以为编译器产生的不同信息添加不同格式,或是为多个编译器添加项目。参见 |efm-entries|。'errorformat' 里的每一项类似 scanf 的格式字符串。首先,你需要了解 scanf 是如何工作的。请查看你的 C 编译器文档。下面你可以看到,Vim 理解 % 条目。其它的则无效。'errorformat' 中的特殊字符是逗号和反斜杠,参见 |efm-entries|。注意实际字符 '%'用 "%%" 来匹配,而不用反斜杠来转义。Note: 省缺忽略大小写差别。如果要匹配大小写,在模式中加入 "\C",参见 |/\C|。基 本 条 目	%f		文件名 (字符串)	%l		行号 (数字)	%c		列号 (代表错误中字符列的数字,(一个 <tab> 等于一个	  		字符列))	%v		实际列号 (代表错误中屏幕列的数字,(一个 <tab> 等于	  		8 个屏幕列))	%t		错误类型 (单个字符)	%n		错误号 (数字)	%m		错误信息 (字符串)	%r		匹配"余下的"的单行文件信息 %O/P/Q	%p		指针行 ('-', '.' 或是 ' ' 的序列,用长度作为列号)	%*{conv}	任何 scanf 非指定转换	%%		单个 '%' 字符"%f" 转换倚赖于当前 'isfname' 的设定。"%f" 和 "%m" 转换需要识别字符串结尾。它们后面可跟一个不能在字符串中出现的字符,在此之前的所有字符都包括在字符串中。但当下一个字符是 '%' 或是反斜杠,"%f"会查找任何 'isfname' 字符,而 "%m" 则查找任意。如果 "%f" 或 "%m" 在结尾,则行中此前的所有字符都被包括。在 MS-DOS, MS-Windows 和 OS/2 系统上,"C:" 会加到 "%f" 开头中,即使使用"%f:"。这就是说单字符(字母表中)文件名别将不被识别。"%p" 转换一般后跟 "^"。这是为了编译器产生的这种输出: >	    ^or >   ---------^以指定错误所在列。这被用在一个多行错误信息中。一个有用的列子,参见|errorformat-javac|。改 变 目 录下面的大写转换指定特殊格式化字符串的类型。它们大多作为以逗号分隔的单个格式的前缀。一些编译器产生含有目录名的信息,这些目录名需要加在 %f 读入文件名的前面 (比如GNU make)。下面的的代码可用于扫描这些目录名;它们将被保存在内部的目录栈中。								*E379*	%D		"进入目录" 格式字符串;期待后跟 %f 以找到目录名	%X		"离开目录" 格式字符串;期待后跟 %f当定义 "进入目录" 或是 "离开目录" 格式时,"%D" 或是 "%X" 需要在字符串的开头。Vim 跟踪记录变化并把当前目录加在错误文件的相对目录中。有关细节,参见|quickfix-directory-stack|。 多 行 信 息					*errorformat-multi-line*可以读入程序输出的多行信息,比如,错误字符超过一行。有关前缀有:	%E		错误信息开始	%W		警告信息开始	%I		一般信息开始	%A		多行信息开始 (未指定类型)	%C		多行信息继续	%Z		多行信息结束这些可同 '+' 和 '-' 一起使用,参见下面的 |efm-ignore|。例子: 你的编译器以下面格式输出 (开头的行号并不是实际输出):     1	Error 275     2	line 42     3	column 3     4	' ' expected after '--'正确的错误格式串应如下: >   :set efm=%EError\ %n,%Cline\ %l,%Ccolumn\ %c,%Z%m这样, |:clist| 产生的出错信息为: 1:42 col 3 error 275:  ' ' expected after '--'另一个例子: Python 解释器产生下面的错误信息 (行号不是实际输出):     1	==============================================================     2	FAIL: testGetTypeIdCachesResult (dbfacadeTest.DjsDBFacadeTest)     3	--------------------------------------------------------------     4	Traceback (most recent call last):     5	  File "unittests/dbfacadeTest.py", line 89, in testFoo     6	    self.assertEquals(34, dtid)     7	  File "/usr/lib/python2.2/unittest.py", line 286, in     8	 failUnlessEqual     9	    raise self.failureException, \    10	AssertionError: 34 != 33    11    12	--------------------------------------------------------------    13	Ran 27 tests in 0.063s假使你想让 |:clist| 输出这样的相关信息: 5 unittests/dbfacadeTest.py:89:  AssertionError: 34 != 33错误格式字符串可这样定义: >  :set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m注意 %C 字符串在 %A 前指定: 因为 ' %.%#' 表达式(表示正则表达式 ' .*')匹配每一个以空格开头后接任何字符的行,这样就包括可以单独产生错误信息的第 7 行。错误格式字符串总是一个模式接一个模式的分析,直到找到首个匹配。单 独 文 件 名				*errorformat-separate-filename*如果编译器输出只给定一次文件名而有多个信息指向这个文件,下面的前缀就很有用:	%O		单行文件信息: 再次读入匹配部分。	%P		单行文件信息: 将 %f 入栈	%Q		单行文件信息: 将最后一个文件名出栈例子: 编译器产生以下出错日志 (不含开头的行号):     1	[a1.tt]     2	(1,17)  error: ';' missing     3	(21,2)  warning: variable 'z' not defined     4	(67,3)  error: end of file found before string ended     5     6	[a2.tt]     7     8	[a3.tt]     9	NEW compiler v1.1    10	(2,2)   warning: variable 'x' not defined    11	(67,3)  warning: 's' already defined这个文件对每个在 [...] 中包括的文件列出了多个信息。我们可以这样设定格式: >  :set efm=%+P[%f],(%l\\,%c)%*[\ ]%t%*[^:]:\ %m,%-Q|:clist| 会正确的显示它们的文件名:  2 a1.tt:1 col 17 error: ';' missing  3 a1.tt:21 col 2 warning: variable 'z' not defined  4 a1.tt:67 col 3 error: end of file found before string ended  8 a3.tt:2 col 2 warning: variable 'x' not defined  9 a3.tt:67 col 3 warning: 's' already defined和其它匹配整行的前缀不同,%P, %Q 和 %O 可以匹配同一行中的多个模式。这样就可以对像下面这样套嵌的文件解析:  {"file1" {"file2" error1} error2 {"file3" error3 {"file4" error4 error5}}}%O 解析不含 入栈/出栈 信息的字符串。更深入的例子,参见 |errorformat-LaTeX|。 忽 略 和 使 用 整 个 信 息				*efm-ignore*'+' 和 '-' 可与上面的大写代码接合;这种情况下,它们要在字母的前面,比如 '%+A'或 '%-G'。	%-		不在任何输出中包含相匹配的多行	%+		在 %m 错误串中包含真个匹配行%G 只在和 '+' 和 '-' 接合使用时才有用。它会解析编译器版本等可被忽略的字符串。	%-G		忽略此信息	%+G		通用信息模 式 匹 配

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -