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

📄 quickfix.cnx

📁 Vim 中文文档
💻 CNX
📖 第 1 页 / 共 3 页
字号:
scanf() 类 "%*[]" 记法仍被支持,以和老版本兼容。但你可以在格式化字符串中指定Vim 支持的(几乎)任何正则表达式。元字符本身可能为匹配字符串或文件名的一部分(因此需要被转义),它们开头都加上一个 '%':	%\		单个 '\' 字符。注意在 ":set errorformat=" 定义中需要	  		用 "%\\" 来转义。	%.		单个 '.' 字符。	%#		单个 '*'(!) 字符。	%^		单个 '^' 字符。	%$		单个 '$' 字符。	%[		单个 '[' 字符 (指定一个 [] 字符范围)。	%~		单个 '~' 字符。当在表达式中使用字符类(参见 |/\i|)时,含有 "\+" 数量符的串可以使用 scanf()的 "%*" 形式。比如: "%\\d%\\+" ("\d\+", "任意数字") 和 "%*\\d" 相同。Note: 子匹配 \(...\) 不能用于格式指定中,因为它被留作内部变换使用。'errorformat' 中 的 多 个 选 项			*efm-entries*为能识别从不同编译器产生的输出,可在 'errorformat' 中指定多个格式模式,用逗号将它们分隔 (note: 逗号后的空格被忽略)。第一个完全匹配的模式被使用。如果没有匹配,则使用最后一个模式中匹配的部分,虽然文件名被删除并且错误信息被设定为整个信息。如果有模式可以匹配多个编译器产生的输出(但不是正确的方式),将它放到一个更严格的模式的后面。要在模式中包括逗号,在它前面加一个反斜杠(如果是在 ":set" 命令中,要加两个)。要包括反斜杠本身,则使用两个反斜杠(在 ":set" 命令中使用四个)。":set" 命令中,在空格前也要加一个反斜杠。有 效 匹 配						*quickfix-valid*如果某行不能完全匹配 'errorformat' 中的项目,则此行被放入到错误信息中并标记为"无效"。这些行会被 ":cn" 和 ":cp" 命令忽略(除非没有任何有效行存在)。你可以用 ":cl!" 来显示所有的出错信息。如果出错格式不含文件名,Vim 不能跳转到正确的文件。你需要手动跳转。例子Aimga 上的 Aztec 编译器产生的错误文件格式是:	filename>linenumber:columnnumber:errortype:errornumber:errormessage	filename	错误所在文件的文件名	linenumber	错误所在行号	columnnumber	错误所在列号	errortype	错误类型,一般为 'E' 或 'W'	errornumber	错误号	errormessage	错误描述可以用这个 'errorformat' 项目来匹配:	%f>%l:%c:%t:%n:%m"一些对产生单行错误输出的编译器的例子:%f:%l:\ %t%*[^0123456789]%n:\ %m	Manx/Aztec C 出错信息					(scanf() 不能理解 [0-9])%f\ %l\ %t%*[^0-9]%n:\ %m		SAS C\"%f\"\\,%*[^0-9]%l:\ %m		一般 C 编译器%f:%l:\ %m				GCC%f:%l:\ %m,%Dgmake[%*\\d]:\ Entering\ directory\ `%f',%Dgmake[%*\\d]:\ Leaving\ directory\ `%f'					与 gmake 接合的 GCC (同一行)%f(%l)\ :\ %*[^:]:\ %m			旧的 SCO C 编译器 (pre-OS5)%f(%l)\ :\ %t%*[^0-9]%n:\ %m		同上,增加错误类型和错误号%f:%l:\ %m,In\ file\ included\ from\ %f:%l:,\^I\^Ifrom\ %f:%l%m					GCC,一些附加信息对多行信息处理更深入的例子,参见 |errorformat-Jikes| 和 |errorformat-LaTeX|.注意在空格和引号前的反斜杠。这对 :set 命令是必须的。在逗号前有两个反斜杠,一个是为 :set 命令须要,一个是为避免将逗号视为出错格式的分隔符。过 滤 信 息如果编译器产生的错误信息和格式串不适合,你可以写一个程序将出错信息转化为适合格式。通过设定 'makeprg' 选项,你可以用 ":make" 命令运行它。比如: >   :set mp=make\ \\\|&\ error_filter管道符前的那些反斜杠是为了避免将其视作命令分隔符。每个空格前的反斜杠是 :set命令所必须的。=============================================================================8. 目录栈					*quickfix-directory-stack*Quickfix 根据 make 输出,维护一个保存所有使用过的目录的栈。对 GNU-make 来讲,这非常简单,因为它总是输出绝对路径,即使是通过 makefile 中的一个 'cd' 命令或以"-C dir" (在读入 makefile 之前进入到指定目录) 参数运行。'-w' 选项可用来强制GNU-make 在处理前后输出当前目录。如果你使用的不是 GNU-make,那目录栈的维护就会复杂得多。比如 AIX-make 从不输出有关当前目录的任何信息。这样你就需要在 makefile 上多花些功夫。lesstiff 的makefile 中有一个命令可以显示 "Making {target} in {dir}"。这里的问题是它并不在离开目录时输出信息,而且它不输出绝对路径。为解决相对路径和缺少 "leave direcotry" 信息问题,Vim 使用下面的算法:1) 检查给定目录是否为当前目录的子目录。如是,则将其存为当前目录。2) 如果不是,则检查它是否为上级目录的子目录。3) 如果目录仍没找到,则假定为它为 Vim 当前目录的子目录。例外,每一个文件都被检查,看其是否存在于识别出的目录中。如果不存在,则在目录栈(不是目录树)的其它目录中查找。如果仍没找到,则假定它在 Vim 当前目录中。此算法仍有限制。本例假定 make 在进入到一个目录时输出类似 "Making all in dir"的信息。1) 假定你有以下目录和文件:   ./dir1   ./dir1/file1.c   ./file1.c   如果 make 在处理当前目录前处理 "./dir1" 目录,而在 文件 "./file1.c" 中存在   一处错误,Vim 会载入文件 "./dir1/file.c"。   这只能靠 "leave direcotry" 信息解决。2) 假定你有以下目录和文件:   ./dir1   ./dir1/dir2   ./dir2   你得到如下结果:   Make 输出			  Vim 理解的目录   ------------------------	  ----------------------------   Making all in dir1		  ./dir1   Making all in dir2		  ./dir1/dir2   Making all in dir2		  ./dir1/dir2   这可以通过在 "enter directory" 信息中输出绝对路径或是输出 "leave direcotry"   信息的方法解决。为避免这些问题,要确保输出绝对路径和 "leave directory" 信息。Makefiles 例子:Unix:    libs:	    for dn in $(LIBDIRS); do				\		(cd $$dn; echo "Entering dir '$$(pwd)'"; make); \		echo "Leaving dir";				\	    done并将    %DEntering\ dir\ '%f',%XLeaving\ dir加到 'errorformat' 选项中以处理上面的输出注意 Vim 并不检查 "leave directory" 信息中的目录是否为当前目录。因此你可使用"Leaving dir" 信息。=============================================================================9. 特定错误格式					*errorformats*						*errorformat-Jikes*Jikes(TM), IBM Research 发布的一个 source-to-bytecode Java 编译器提供简单的多行信息。一个和产生的信息相匹配的格式字符如下所示。这面这几行可加到用户的 |vimrc| 以覆盖 Vim 识别的省缺模式。或者,你可以参考|:set+=| 将这个模式加入到省缺中。 >  :set efm=%A%f:%l:%c:%*\\d:%*\\d:,	\%C%*\\s%trror:%m,	\%+C%*[^:]%trror:%m,	\%C%*\\s%tarning:%m,	\%C%m<以 "+E" 选项启动时,Jikes(TM) 产生一个单行信息。对此,可以这样匹配: >  :set efm=%f:%l:%v:%*\\d:%*\\d:%*\\s%m<						*errorformat-javac*'errorformat' 可以很好的和 javac 工作,javac 的输出中用 "^" 表示错误所在列: >  :set efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%#或者: >  :set efm=%A%f:%l:\ %m,%+Z%p^,%+C%.%#,%-G%.%#<						*errorformat-ant*ant (http://jakarta.apache.org/) 输出的每个行首都为 [javac],这样我们可将上面的格式修改如下: >  :set efm=%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#'errorformat' 还可以处理 ant 和 javac 或是 jikes 的接合。如使用 jikes, 你需要告诉 ant 使用 jikes 的 +E 选项以使 jikes 产生单行错误信息。(一个 build.xml 文件的)第二行如下所示:  <property name = "build.compiler"       value = "jikes"/>  <property name = "build.compiler.emacs" value = "true"/>'errorformat' 同时处理 ant 与 javac 和 jikes: >  :set efm=\ %#[javac]\ %#%f:%l:%c:%*\\d:%*\\d:\ %t%[%^:]%#:%m,	   \%A\ %#[javac]\ %f:%l:\ %m,%-Z\ %#[javac]\ %p^,%-C%.%#<						*errorformat-jade*解析 jade (see http://www.jclark.com/) 错误十分简单: >  :set efm=jade:%f:%l:%c:%t:%m<						*errorformat-LaTeX*下面是 'errorformat' 处理 (La)Tex 产生的多行错误输出的例子。":clist" 和 ":cc"等命令将多行错误信息显示在一行,开头的空格被删除。将 LaTeX 的错误格式运用于其它产生多行错误信息的编译器就很简单了。命令可被加到 |vimrc| 或是其它 Vim 脚本,比如一个在编辑 LaTeX 源文件时载入的含有 LaTeX 相关东西的脚本。确定将例子中的所有行都拷贝,然后可删除注释行。对一些行中开头的 '\',参考|line-continuation|.		首先设定 'makeprg' 使 LaTeX 可以报多行错;且在首个错误发生时		不停止: > :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}<		多行错误信息开始: > :set efm=%E!\ LaTeX\ %trror:\ %m,	\%E!\ %m,<		多行警告信息开始;开始的两个包含行号。一些正则表达式的意义:		  - "%.%#"  (".*")   匹配一个可为空的字符串		  - "%*\\d" ("\d\+") 匹配一个数字 >	\%+WLaTeX\ %.%#Warning:\ %.%#line\ %l%.%#,	\%+W%.%#\ at\ lines\ %l--%*\\d,	\%WLaTeX\ %.%#Warning:\ %m,<		错误/警告信息继续;首个含有行号: >	\%Cl.%l\ %m,	\%+C\ \ %m.,	\%+C%.%#-%.%#,	\%+C%.%#[]%.%#,	\%+C[]%.%#,	\%+C%.%#%[{}\\]%.%#,	\%+C<%.%#>%.%#,	\%C\ \ %m,<		匹配下面模式的行不含有任何重要的信息;将其忽略: >	\%-GSee\ the\ LaTeX%m,	\%-GType\ \ H\ <return>%m,	\%-G\ ...%.%#,	\%-G%.%#\ (C)\ %.%#,	\%-G(see\ the\ transcript%.%#),<		删除所有空白行: >	\%-G\\s%#,<		LaTeX 输出并不在每一行中都指定出错的文件名;而只在括号中指定		一次。		下面的模式试图匹配这些文件名并将它们保存到内部栈中。这些模式		可能扫描相同行(一个接一个的),结尾的 "%r" 表示 行中 "余下"		的部分,以在下轮被解析,直到行尾。		再次读入 '('...')' 包含的文件名;这并不将其入栈,因为此文件		不含有任何错误: >	\%+O(%f)%r,<		将 '(' 后的文件名入栈: >	\%+P(%f%r,	\%+P\ %\\=(%f%r,	\%+P%*[^()](%f%r,	\%+P[%\\d%[^()]%#(%f%r,<		当扫描到 ')', 将最后一个文件名出栈: >	\%+Q)%r,	\%+Q%*[^()])%r,	\%+Q[%\\d%*[^()])%r注意某些情况下,LaTeX 输出中的文件名不能正确解析。解析会被不成对的括号打乱。上面的例子只试图捕获最普通的情况。你可以根据你的需要而修改有关设定,比如,所有烦人的 "Overfull ..." 警告可不被视为出错。除了过滤 LaTeX 的输出信息外你还可以直接读入 [La]TeX 编译器生成的 *.log 文件。这包括其它的一些由错误引起的有用信息。但要解析这么复杂的文件,你需要使用外部过滤器。参考上面关于 Vim 过滤器的描述。						*errorformat-Perl*在 $VIMRUNTIME/tools 中,你可以找到 efm_perl.pl 脚本。它将 Perl 出错信息过滤为 quickfix 模式的可懂格式。关于怎样使用它,查看该文件的开头部分。 vim:tw=78:ts=8:ft=help:norl:

⌨️ 快捷键说明

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