SYNTAX

*syntax.txt*    For Vim version 7.2.  最近更新: 2008年8月


                  VIM 参考手册    by Bram Moolenaar
                                译者: Willis
                                http://vimcdoc.sf.net


语法高亮                        *syntax* *syntax-highlighting* *coloring*

语法高亮使得 Vim 可以用不同的字体或颜色显示文本的不同部分。这些部分可以是特定
的关键字,或者匹配某模式的文本。Vim 不会分析整个文件 (为了保持快速),所以高亮
功能有其限制。词法高亮或者是一个更合适的名字,但既然大家都使用语法高亮,我们也
就如此称呼。

Vim 支持所有终端上的语法高亮。但因为多数普通的终端只有有限的高亮的选择,GUI 版
本 gvim 的语法高亮的效果最好。

用户手册里:
|usr_06.txt| 介绍语法高亮。
|usr_44.txt| 介绍如何写语法文件。

1.  快速入门                    |:syn-qstart|
2.  语法文件                    |:syn-files|
3.  语法载入过程                |syntax-loading|
4.  语法文件附注                |:syn-file-remarks|
5.  定义语法                    |:syn-define|
6.  :syntax 参数                |:syn-arguments|
7.  语法模式                    |:syn-pattern|
8.  语法簇                      |:syn-cluster|
9.  包含语法文件                |:syn-include|
10. 同步                        |:syn-sync|
11. 列出语法项目                |:syntax|
12. Highlight 命令              |:highlight|
13. 链接组                      |:highlight-link|
14. 清理                        |:syn-clear|
15. 高亮标签                    |tag-highlight|
16. 彩色 xterm                  |xterm-color|

{Vi 无此功能}

如果编译时关闭了 |+syntax| 特性,就不会有语法高亮的功能。


1. 快速入门 *:syn-qstart*

*:syn-enable* *:syntax-enable* 这个命令打开语法高亮: :syntax enable 实际上,它只是执行如下命令 :source $VIMRUNTIME/syntax/syntax.vim 如果没有设置 VIM 环境变量,Vim 会试图用其它方法找到该路径 (见 |$VIMRUNTIME|)。 通常总能找到,如果不行,你可以自己设置 VIM 环境变量为存放 Vim 相关文件所在的 目录。例如,如果你的语法文件放在 "/usr/vim/vim50/syntax" 目录,设置 $VIMRUNTIME 为 "/usr/vim/vim50"。启动 Vim 前,你必须在外壳上进行此设置。 *:syn-on* *:syntax-on* ":syntax enable" 命令会保持你当前的色彩设置。这样,不管在使用此命令的前后,你 都可以用 ":highlight" 命令设置你喜欢的颜色。如果你希望 Vim 用缺省值覆盖你自己 的,只要用: :syntax on *:hi-normal* *:highlight-normal* 如果你运行在 GUI 环境里,你可以这样得到黑底白字: :highlight Normal guibg=Black guifg=White 关于色彩终端,见 |:hi-normal-cterm|。 关于设置你自己的语法高亮色彩,见 |syncolor|。 注意: MS-DOS 和 Windows 上的语法文件以 <CR><NL> 结束每一行。Unix 上则以 <NL> 结尾。这意味着你需要为自己的系统选择合适的文件。不过,在 MS-DOS 和 Windows 上,如果 'fileformats' 选项非空,会自动选择正确的格式。 注意: 使用反转视频时 ("gvim -fg white -bg black"),'background' 的缺省值直到 GUI 窗口打开时才会设置。这发生在 |gvimrc| 的读入之后,从而会使用错误的缺省高 亮。要在打开高亮前设置 'background' 的缺省值,在 |gvimrc| 文件里包含 ":gui" 命 令: :gui " 打开窗口并设置 'background' 的缺省值 :syntax on " 启动语法高亮,使用 'background' 来设置颜色 注意: 在 |gvimrc| 里使用 ":gui" 意味着 "gvim -f" 不会在前台打开!这时,要使用 ":gui -f"。 你可以用这个命令切换语法的打开/关闭 :if exists("syntax_on") | syntax off | else | syntax enable | endif 要把它放到映射里,你可以用: :map <F7> :if exists("syntax_on") <Bar> \ syntax off <Bar> \ else <Bar> \ syntax enable <Bar> \ endif <CR> [使用 |<>| 记法,按本义输入] 细节: ":syntax" 命令是用执行文件脚本实现的。要了解它到底干了什么,察看以下文件: 命令 文件 :syntax enable $VIMRUNTIME/syntax/syntax.vim :syntax on $VIMRUNTIME/syntax/syntax.vim :syntax manual $VIMRUNTIME/syntax/manual.vim :syntax off $VIMRUNTIME/syntax/nosyntax.vim 另见 |syntax-loading|。

2. 语法文件 *:syn-files*

某个语言的语法和高亮命令通常存在一个语法文件里。命名惯例是: "{name}.vim"。其 中,{name} 是语言的名字或者缩写 (一旦在 DOS 文件系统上,要适用 8.3 字符的名字 限制)。 例如: c.vim perl.vim java.vim html.vim cpp.vim sh.vim csh.vim 语法文件可以包含任何 Ex 命令,就像 vimrc 文件那样。但应该只有适用于特定语言的 命令才放在里面。如果该语言是另外一个语言的超集,它可以包含那个语言对应的文件。 例如,cpp.vim 可以包含 c.vim 文件: :so $VIMRUNTIME/syntax/c.vim .vim 文件通常使用自动命令载入。例如: :au Syntax c runtime! syntax/c.vim :au Syntax cpp runtime! syntax/cpp.vim 这些命令通常出现在 $VIMRUNTIME/syntax/synload.vim 文件里。 如果你有多个文件,可以用文件类型作为目录名。该目录下的所有 "*.vim" 文件都会被 使用。例如: ~/.vim/after/syntax/c/one.vim ~/.vim/after/syntax/c/two.vim 创 立 你 自 己 的 语 法 文 件 *mysyntaxfile* 一旦你创立自己的语法文件,并且需要 Vim 在使用 ":syntax enable" 的时候自动调用 它们的时候,按如下操作进行: 1. 建立自己的用户运行时目录。通常,把它放在 'runtimepath' 选项的第一项。Unix 的例子: mkdir ~/.vim 2. 在其中建立 "syntax" 目录。Unix 上: mkdir ~/.vim/syntax 3. 编写 Vim 语法文件。或者从 internet 下载。然后写入你的 syntax 目录。例如,对 于 "mine" 语言的语法: :w ~/.vim/syntax/mine.vim 现在你可以手动启动语法文件: :set syntax=mine 这时,你并不需要退出 Vim。 如果你想 Vim 也实现文件类型的检测,见 |new-filetype|。 如果你想为多个用户设立系统,而不希望每个用户增加相同的语法文件的话,可以使用 'runtimepath' 里的其它目录。 添 加 到 已 存 在 的 语 法 文 件 *mysyntaxfile-add* 如果你对已有的语法文件大体满意,只需要增加或者修正一些高亮项目,执行以下步骤即 可: 1. 建立你的 'runtimepath' 里的用户目录,见上。 2. 在那里建立目录 "after/syntax"。Unix 上: mkdir ~/.vim/after mkdir ~/.vim/after/syntax 3. 编写 Vim 脚本,包含你希望使用的命令。例如,要在 C 语法里改变颜色: highlight cComment ctermfg=Green guifg=Green 4. 把该文件写道 "after/syntax" 目录。使用该语法的名字,另加上 ".vim"。对于我们 的 C 语法: :w ~/.vim/after/syntax/c.vim 这样就行了。下一次你编辑 C 文件时,Comment 色彩就不会一样了。你甚至不需要重启 Vim。 替 换 已 存 在 的 语 法 文 件 *mysyntaxfile-replace* 如果你不喜欢发布的语法文件版本,或者你下载了新版本。可以采用上述的 |mysyntaxfile| 相同的步骤。只要确保你写的语法文件在 'runtimepath' 较早的位置就 可以了。Vim 只会载入第一个找到的语法文件。 命 名 惯 例 *group-name* *{group-name}">{group-name}* *E669* *W18* 高亮或者语法组的名字必须由 ASCII 字母,数字和下划线组成。如使用正规表达式表示: "[a-zA-Z0-9_]*"。 要允许每个用户选择他自己喜欢的色彩系列,许多语言应该使用相同的高亮组名。以下是 建议的组名 (如果语法高亮能够正确工作,你应该能看到实际的颜色,除了 "Ignore" 以 外): *Comment v 任何注释 *Constant v 任何常数 String v 一个字符串常数: "这是一个字符串" Character v 一个字符常数: 'c'、'\n' Number v 一个数字常数: 234、0xff Boolean v 一个布尔型常数: TRUE、false Float v 一个浮点常数: 2.3e10 *Identifier v 任何变量名 Function v 函数名 (也包括: 类的方法名) *Statement v 任何语句 Conditional v if、then、else、endif、switch 等 Repeat v for、do、while 等 Label v case、default 等 Operator v "sizeof"、"+"、"*" 等 Keyword v 任何其它关键字 Exception v try、catch、throw *PreProc v 通用预处理命令 Include v 预处理命令 #include Define v 预处理命令 #define Macro v 等同于 Define PreCondit v 预处理命令 #if、#else、#endif 等 *Type v int、long、char 等 StorageClass v static、register、volatile 等 Structure v struct、union、enum 等 Typedef v 一个 typedef *Special v 任何特殊符号 SpecialChar v 常数中的特殊字符 Tag v 这里可以使用 CTRL-] Delimiter v 需要注意的字符 SpecialComment v 注释里的特殊字符 Debug v 调试语句 *Underlined v 需要突出的文本,HTML 链接 *Ignore v 留空,被隐藏 *Error v 任何有错的构造 *Todo v 任何需要特殊注意的部分;多是关键字 TODO FIXME 和 XXX * 标记的名字是主要组,其它是次要组。对主要组而言,"syntax.vim" 文件包含缺省的 高亮设置。次要组则链接到主要组。所以它们拥有相同的高亮设置。不过,你可以通过 ":highlight" 命令在 "syntax.vim" 文件之后改变所有组的缺省值。 注意高亮组的名字对大小写不敏感。"String" 和 "string" 可用来表示相同的组。 以下名字是保留字,它们不应用作组名: NONE ALL ALLBUT contains contained

3. 语法载入过程 *syntax-loading*

这里解释命令 ":syntax enable" 执行的细节。Vim 初始化自身时,它寻找运行时文件的 位置。其值用来设置这里使用的变量 |$VIMRUNTIME|。 ":syntax enable" 和 ":syntax on" 完成以下步骤: 执行 $VIMRUNTIME/syntax/syntax.vim | +- 清除旧的语法: 执行 $VIMRUNTIME/syntax/nosyntax.vim | +- 先执行 'runtimepath' 里的 syntax/synload.vim | | | +- 为语法高亮设置色彩。如果已经定义了色彩方案,使用 ":colors {name}" | | 再次载入。不然,执行 ":runtime! syntax/syncolor.vim"。":syntax on" | | 会覆盖已有的颜色,而 ":syntax enable" 只会设置没有设置过的组。 | | | +- 设置 syntax 自动命令,以便在设置 'syntax' 选项时,自动载入合适的语 | | 法文件。 *synload-1* | | | +- 通过 |mysyntaxfile| 变量,载入用户可选的文件。这只是为了和 Vim 5.x | | 兼容。 *synload-2* | +- 执行 ":filetype on",后者又执行 ":runtime! filetype.vim"。它载入任何找 | 到的 filetype.vim。其中,总会执行 $VIMRUNTIME/filetype.vim。后者执行: | | | +- 根据后缀名,安装自动命令来设置 'filetype' 选项。这为已知的文件类型 | | 建立了文件名和文件类型的联系。 *synload-3* | | | +- 通过 *myfiletypefile* 变量,载入用户可选的文件。这只是为了和 Vim | | 5.x 兼容。 *synload-4* | | | +- 安装自动命令,在没有检测到文件类型时执行 scripts.vim 。 | | *synload-5* | | | +- 执行 $VIMRUNTIME/menu.vim,设置 Syntax 菜单。|menu.vim| | +- 安装 FileType 自动命令,在检测到文件类型时,设置 'syntax' 选项。 | *synload-6* | +- 执行 syntax 自动命令,为每个已经载入的缓冲区启动语法高亮。 载入文件时,Vim 这样查找相关的语法文件: 文件的载入激活 BufReadPost 自动命令。 | +- 如果和 |synload-3| 中的一个自动命令匹配 (已知的文件类型) 或者 | |synload-4| (用户的文件类型),'filetype' 选项设为文件的所属类型。 | +- 如果文件类型没有找到,激活 |synload-5| 中的自动命令,并在 | 'runtimepath' 里找寻 scripts.vim。其中,总是会执行 | $VIMRUNTIME/scripts.vim。后者执行以下步骤。 | | | +- 通过 *myscriptsfile* 变量,载入用户可选的文件。这只是为了和 Vim | | 5.x 兼容。 | | | +- 如果文件类型仍然未知,检查文件的内容,并使用类似于 | "getline(1) =~ pattern" 的检查确定文件类型能否识别,并设置 | 'filetype'。 | +- 如果文件类型被确定并且设置了 'filetype',激活 FileType 自动命令,见上 | 面的 |synload-6|。根据确定的文件类型设置 'syntax'。 | +- 上面设置 'syntax' 选项的步骤激活 |synload-1| (和 |synload-2|) 设置的自 | 动命令。它会使用以下命令找到 'runtimepath' 里的主语法文件: | runtime! syntax/<name>.vim | +- 激活任何用户安装的 FileType 或 Syntax 自动命令。这可以用来为某项语法修 正高亮方式。

4. 语法文件附注 *:syn-file-remarks*

*b:current_syntax-variable* 根据当前激活的是哪部语法,Vim 把载入的语法的名字保存在 "b:current_syntax" 变量 里。例如: :au BufReadPost * if b:current_syntax == "csh" :au BufReadPost * 做一些事 :au BufReadPost * endif 2HTML *2html.vim* *convert-to-HTML* 它本身并不是语法文件,只是一个把当前窗口转换成 HTML 的脚本。Vim 打开一个新窗 口,在那里它构造 HTML 文件。 你不应该设置 'filetype' 或 'syntax' 选项为 "2html"!执行此脚本,以转换当前文 件: :runtime! syntax/2html.vim 警告: 这挺慢的! *:TOhtml* 也可以使用 ":TOhtml" 用户命令。它是在一个标准插件里定义的。":TOhtml" 可用于行 范围和可视区域: :10,40TOhtml 保存结果文件以后,你可以使用任何 HTML 察看器浏览,比如 Netscape。那里的颜色应 该和你在 Vim 里看到的一模一样。 要限制转换的行范围,设置 "html_start_line" 和 "html_end_line" 分别为要转换的第 一行和最后一行。例如,要指定最近设置的可视区域: :let html_start_line = line("'<") :let html_end_line = line("'>") 行的标号方式根据 'number' 选项和 Number 高亮属性而定。通过设置 "html_number_lines" 为一非零值,你可以让输出的 HTML 强制给行编号: :let html_number_lines = 1 设为零则强制关闭行号: :let html_number_lines = 0 要回到缺省情况,即使用 'number' 的设置,可删除此变量: :unlet html_number_lines HTML 里关闭折叠的处理和实际显示的效果一样。如果不想如此,启动 2html 前用 |zR| 命令,或者: :let html_ignore_folding = 1 缺省情况生成为旧版本的浏览器优化的 HTML。如果你希望使用层叠样式表 (CSS1) 来设 置属性 (产生相当简洁且合法的 HTML 4 文件),可用: :let html_use_css = 1 缺省使用 "<pre>" 和 "</pre>" 围绕文本。使得这些文本看起来和 Vim 的一致,但没有 回绕。如果你希望有回绕,且可以忍受不太一致的外观,可使用: :let html_no_pre = 1 这会在每行结束的地方使用 <br>,而用 "&nbsp;" 来显示连续的空格。 'encoding' 的当前值用于指定 HTML 文件的字符集。这只适用于 'encoding' 的值有对 应的 HTML 字符集名字的时候。要改变这种机制,设置 g:html_use_encoding 为要用的 字符集名: :let html_use_encoding = "foobar" 如果不想产生指定字符集的那行,设置 g:html_use_encoding 为空字符串: :let html_use_encoding = "" 要回到自动的机制,删除 g:html_use_encoding 变量: :unlet html_use_encoding 关于 diff 模式,多于三行的填充行序列显示为三行,中间行提到插入的总行数。如果你 宁愿看到所有的插入行,用: :let html_whole_filler = 1 要回到三行的显示方式: :unlet html_whole_filler *convert-to-XML* *convert-to-XHTML* 另一个选择是使用该脚本产生 XHTML (XML 兼容的 HTML)。这可以通过设置 "use_xhtml" 变量完成: :let use_xhtml = 1 要关闭此选择,删除该变量: :unlet use_xhtml 这里产生的 XHTML 文件可以在 DocBook XML 文档里使用。见: http://people.mech.kuleuven.ac.be/~pissaris/howto/src2db.html 评注: - 只有在 GUI 支持的版本里,才能工作。如果没有运行 GUI (可能仍然使用 X11),或许 也可以,但是效果不一定好 (颜色可能不对)。 - 较旧的浏览器不会显示背景色。 - 你可以在大多数浏览器里打印文件 (而且有颜色)! 此处是一个如何在 Unix 外壳上给所有的 .c 和 .h 文件运行此脚本的例子: for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done ABEL *abel.vim* *ft-abel-syntax* ABEL 高亮设置提供一些用户定义的选项。要打开这些选项,给相应的选项设置任意值。 例如: :let abel_obsolete_ok=1 可用 ":unlet" 关闭。例如: :unlet abel_obsolete_ok 变量 高亮 abel_obsolete_ok 废弃的关键字接受为 statement,而非 error abel_cpp_comments_illegal 不把 '//' 解释为行内注释的引导符 ADA 见 |ft-ada-syntax| ANT *ant.vim* *ft-ant-syntax* ant 语法文件缺省提供了 javascript 和 python 的语法高亮。其他脚本语言的语法高亮 可以通过 AntSyntaxScript() 函数安装。它接受的第一个参数是标签名,而第二个是脚 本语法文件名。例如: :call AntSyntaxScript('perl', 'perl.vim') 会为下面的 ant 代码提供 Perl 的语法高亮 <script language = 'perl'><![CDATA[ # 这里的一切都作为 perl 脚本高亮 ]]></script> |mysyntaxfile-add| 说明如何永久的安装脚本语言。 APACHE *apache.vim* *ft-apache-syntax* Apache 语法文件提供的语法高亮取决于 Apache HTTP 服务器的版本,缺省为 1.3.x。设 置 "apache_version" 为 Apache 的相应版本 (字符串形式) 可以得到其它版本的高亮方 式。例如: :let apache_version = "2.0" *asm.vim* *asmh8300.vim* *nasm.vim* *masm.vim* *asm68k* ASSEMBLY *ft-asm-syntax* *ft-asmh8300-syntax* *ft-nasm-syntax* *ft-masm-syntax* *ft-asm68k-syntax* *fasm.vim* 匹配 "*.i" 的可以是 Progress 或者汇编文件。如果自动检测对你不工作,或者你从来 不编辑 Progress,在你启动的 vimrc 里这么用: :let filetype_i = "asm" 把 "asm" 替换成你实际使用的汇编语言。 许多类型的汇编语言都使用相同的文件扩展名。因而,你或者需要自己选择类型,或者在 汇编文件里增加使 Vim 能识别的行。目前,包含了以下的语法文件: asm GNU 汇编 (缺省) asm68k Motorola 680x0 汇编 asmh8300 Hitachi H-8300 版本的 GNU 汇编 ia64 Intel Itanium 64 fasm Flat 汇编 (http://flatassembler.net) masm Microsoft 汇编 (可能适用于任何 80x86) nasm Netwide 汇编 tasm Turbo 汇编 (提供到 Penitum 和 MMX 的 80x86 操作码) pic PIC 汇编 (目前支持 PIC16F84) 最灵活的方式是在你的汇编文件里加上如下一行: :asmsyntax=nasm 把 "nasm" 换成实际的汇编语法的名字。该行必须是文件头五行中的一行。 语法类型可以为某个缓冲区定制。方法是设置 b:asmsyntax 变量: :let b:asmsyntax = "nasm" 如果没有设置 b:asmsyntax,不管是自动还是手动,就会使用全局变量 asmsyntax 的 值。它可以看作是缺省的汇编语言: :let asmsyntax = "nasm" 如果什么都没有定义,最后就假定是 "asm" 语法。 Netwide 汇编器 (nasm.vim) 可选高亮特性 要打开特性: :let {variable}=1|set syntax=nasm 要关闭特性: :unlet {variable} |set syntax=nasm 变量 高亮 nasm_loose_syntax 非正式的分析器允许的语法不视为错误 (取决于分析器;不推 荐) nasm_ctx_outside_macro 宏之外的上下文不视为错误 nasm_no_warn 潜在有危险的语法不视为 Todo 那样的警告 ASPPERL 和 ASPVBS *ft-aspperl-syntax* *ft-aspvbs-syntax* *.asp 和 *.asa 文件可以是 Perl 或者 Visual Basic 脚本。因为很难检测,你可以设 置两个全局变量,来告诉 Vim 你要用哪一个。Perl 脚本可用: :let g:filetype_asa = "aspperl" :let g:filetype_asp = "aspperl" Visual Basic 可用: :let g:filetype_asa = "aspvbs" :let g:filetype_asp = "aspvbs" BAAN *baan.vim* *baan-syntax* baan.vim 提供 BaanIV 到 SSA ERP LN 发行版的 BaanC 的语法支持,用于 3 GL 和 4 GL 编程。支持很多的标准宏定义/常数。 如果你在某个 |.vimrc| 里指定下面这行,不合编码标准的一些特殊错误会被报告: let baan_code_stds=1 *baan-folding* 使用下面提到的变量,可以在不同层次上打开语法折叠 (在 |.vimrc| 里设置)。源代码 块和 SQL 上越复杂的折叠越需要 CPU。 要允许折叠并在函数级别上打开折叠: let baan_fold=1 可以在源代码块级别上打开折叠,如 if、while、for,... 这里开始/结束关键字之前的 缩进必须一致 (空格不等于制表)。 let baan_fold_block=1 可以为内嵌的 SQL 块打开折叠,如 SELECT、SELECTDO、SELECTEMPTY,... 这里开始/结 束关键字之前的缩进必须一致 (空格不等于制表)。 let baan_fold_sql=1 注意: 代码块级别的折叠可能产生许多小的折叠。建议在 .vimrc 里用 |:set| 设置选项 'foldminlines' 和 'foldnestmax',在 .../after/syntax/baan.vim 里用 |:setlocal| 设置也可以 (见 |after-directory|)。例如: set foldminlines=5 set foldnestmax=6 BASIC *basic.vim* *vb.vim* *ft-basic-syntax* *ft-vb-syntax* Visual Basic 和 "普通的" Basic 都使用扩展名 ".bas"。要检测使用的是哪一个,Vim 在文件的头五行检查字符串 "VB_Name"。如果没找到,文件类型将是 "basic",不然就是 "vb"。带 ".frm" 扩展名的文件总被视为 Visual Basic 类型。 C *c.vim* *ft-c-syntax* C 高亮的一些设置是可选的。要打开,给相应的变量赋任何值。例如: :let c_comment_strings = 1 可用 ":unlet" 关闭。例如: :unlet c_comment_strings 变量 高亮 c_gnu GNU gcc 专用的项目 c_comment_strings 注释里的字符串和数字 c_space_errors 行尾的空格和 <Tab> 之前的空格 c_no_trail_space_error ... 不包括行尾的空格 c_no_tab_space_error ... 不包括 <Tab> 之前的空格 c_no_bracket_error 不高亮 {};如果在 [] 里面视为错误 c_no_curly_error 不高亮 {};如果在 [] 和 () 里面视为错误; 除了出现在首列的 { 和 } 以外 c_curly_error 高亮丢失的 };强制从文件首开始同步,因而可能会较慢 c_no_ansi 不使用 ANSI 标准类型和常数 c_ansi_typedefs ... 但使用 ANSI 标准类型 c_ansi_constants ... 但使用 ANSI 标准常数 c_no_utf 不高亮字符串里的 \u 和 \U c_syntax_for_h *.h 文件使用 C 语法,而不是 C++ 的 c_no_if0 不把 "#if 0" 块高亮为注释 c_no_cformat 不高亮字符串里的 %-格式 c_no_c99 不高亮 C99 标准的项目 如果 'foldmethod' 设为 "syntax",那么 /* */ 注释和 { } 块成为折叠。如果你不想 让注释成为折叠: :let c_no_comment_fold = 1 "#if 0" 块也被折叠,除非: :let c_no_if0_fold = 1 如果你注意到往回滚动时,高亮出现问题,但 CTRL-L 重画又可以修正的话,尝试设置 "c_minlines" 内部变量为较大的值: :let c_minlines = 100 这使得语法同步在第一个显示行之前的 100 行开始。缺省值为 50 (如果设置了 c_no_if0,则为 15)。使用较大的值的缺点是重画会变慢。 如果使用 "#if 0" / "#endif" 风格的注释高亮,注意它只适用于 "#if 0" 出现在窗口 顶部往上不超过 "c_minlines" 行的场合。如果你有很长的 "#if 0" 构造,它不会被正 确地高亮。 要匹配注释里的附加项目,使用 cCommentGroup 簇。例如: :au Syntax c call MyCadd() :function MyCadd() : syn keyword cMyItem contained Ni : syn cluster cCommentGroup add=cMyItem : hi link cMyItem Title :endfun ANSI 常数使用 "cConstant" 组高亮。这包括 "NULL"、"SIG_IGN" 还有其它。但不包 括,比如说,"TRUE"。因为它不在 ANSI 标准里。如果你觉得弄不清楚,删除 cConstant 高亮: :hi link cConstant NONE 如果你看到 '{' 和 '}' 被高亮为错误,而实际并非如此的时候,复位 cErrInParen 和 cErrInBracket 的高亮。 如果想在你的 C 文件里使用折叠,可以在 'runtimpath' 的 "after" 目录下的一个文件 里加上这些行。Unix 上,这会是 ~/.vim/after/syntax/c.vim. syn sync fromstart set foldmethod=syntax CH *ch.vim* *ft-ch-syntax* C/C++ 解释器。Ch 的语法高亮和 C 相似,它基于 C 语法文件。|c.vim| 说明所有 C 可 用的设置。 设置此变量,告诉 Vim 用 Ch 语法来处理 *.h 文件,而不是 C 或 C++ 语法: :let ch_syntax_for_h = 1 CHILL *chill.vim* *ft-chill-syntax* Chill 语法高亮和 C 类似。可用的设置见 |c.vim|。此外,还有: chill_space_errors 类似于 c_space_errors chill_comment_string 类似于 c_comment_strings chill_minlines 类似于 c_minlines CHANGELOG *changelog.vim* *ft-changelog-syntax* ChangeLog 支持行首的空格高亮。如果你不喜欢,在你的 .vimrc 里加入下行: let g:changelog_spacing_errors = 0 下次你编辑 changelog 文件时,就会应用。你也可以使用 "b:changelog_spacing_errors" 来为每个缓冲区分别设置 (在载入语法文件以前)。 你可以改变现在使用的高亮,例如把空格标记为错误: :hi link ChangelogError Error 或者避免高亮: :hi link ChangelogError NONE 这些会立即生效。 COBOL *cobol.vim* *ft-cobol-syntax* COBOL 高亮对传统的代码和新开发的代码有不同的需要。这来自于需求的差异 (维护还是 开发),以及一些其它因素。要使用传统代码的高亮,在 .vimrc 里加上此行: :let cobol_legacy_code = 1 要再次关闭,可用: :unlet cobol_legacy_code COLD FUSION *coldfusion.vim* *ft-coldfusion-syntax* ColdFusion 有 HTML 注释的自己的版本。要打开 ColdFusion 风格的注释高亮,在你的 启动文件里加上此行: :let html_wrong_comments = 1 ColdFusion 语法文件是基于 HTML 的语法文件的。 CSH *csh.vim* *ft-csh-syntax* 这里讨论名为 "csh" 的外壳。注意 有的系统实际使用的是 tcsh。 要检测一个文件是 csh 还是 tcsh 异常困难。有的系统把 /bin/csh 符号链接到 /bin/tcsh,使得区别 csh 和 tcsh 几乎不可能。如果 VIM 猜错,你可以自己设置 "filetype_csh" 变量。要使用 csh: :let filetype_csh = "csh" 要使用 tcsh: :let filetype_csh = "tcsh" 带 tcsh 扩展名的脚本或者 tcsh 的标准文件名 (.tcshrc、tcsh.tcshrc、tcsh.login) 会使用文件类型 tcsh。其它的 tcsh/csh 脚本也会被识别为 tcsh,_除非_存在 "filetype_csh" 变量。如果存在 "filetype_csh" 变量,文件类型会设为该变量的值。 CYNLIB *cynlib.vim* *ft-cynlib-syntax* Cynlib 文件是使用 Cynlib 类库的 C++ 文件。它们使用 C++ 来为硬件建模和模拟。通 常 Cynlib 文件使用 .cc 或 .cpp 扩展名,这使得它们和普通的 C++ 文件难以区别。因 而,要使用 Cynlib 为 .cc 文件高亮,在你的 .vimrc 文件里加上此行: :let cynlib_cyntax_for_cc=1 cpp 文件也类似 (该扩展名通常为 Windows 使用) :let cynlib_cyntax_for_cpp=1 要再次关闭,可用: :unlet cynlib_cyntax_for_cc :unlet cynlib_cyntax_for_cpp CWEB *cweb.vim* *ft-cweb-syntax* 匹配 "*.w" 的文件可为 Progress 文件或者 cweb 文件。如果自动检测不行,或者你从 来不编辑 Progress,可以在启动的 vimrc 文件里用: :let filetype_w = "cweb" DESKTOP *desktop.vim* *ft-desktop-syntax* 该语法文件的主要目的是根据 freedesktop.org 标准: http://pdx.freedesktop.org/Standards/ 来高亮 .desktop 和 .directory 文件。但实 际上,几乎没人完全实现了标准。所以,它实际被用来高亮所有的 Unix ini 文件。如果 你希望强制使用符合标准的严格的高亮方式,在 vimrc 文件放上: :let enforce_freedesktop_standard = 1 DIRCOLORS *dircolors.vim* *ft-dircolors-syntax* dircolors 工具的高亮定义有一个选项。它的存在是为了和 Slackware GNU/Linux 发布 版本里的该命令兼容。它增加了一些多数版本忽略的关键字。在 Slackware 系统中,该 工具接受这些关键字并在处理中应用。要允许使用 Slackware 关键字,在你的启动文件 里加入如下一行: let dircolors_is_slackware = 1 DOCBOOK *docbk.vim* *ft-docbk-syntax* *docbook* DOCBOOK XML *docbkxml.vim* *ft-docbkxml-syntax* DOCBOOK SGML *docbksgml.vim* *ft-docbksgml-syntax* 有两种类型的 DocBook 文件: SGML 和 XML。要指定使用那种类型,需要设置 "b:docbk_type" 变量。如果 Vim 能够识别,它会自动设置该变量。如果 Vim 猜不到, 缺省的类型是 XML。 你可以手动设置: :let docbk_type = "sgml" 或者: :let docbk_type = "xml" 你需要在载入语法文件前作如此设置,这有点复杂。 更简单的方法是设置文件类型为 "docbkxml" 或 "docbksgml": :set filetype=docbksgml 或: :set filetype=docbkxml DOSBATCH *dosbatch.vim* *ft-dosbatch-syntax* DOS 批处理文件的高亮有一个选项。它和 Windows 2000 的命令解释器的新扩展有关,可 以通过 dosbatch_cmdextversion 变量控制。Windows NT 上,它应该取值为 1,Windows 2000 应该为 2。下面这行可以选择你想要的版本: :let dosbatch_cmdextversion = 1 如果没有定义该变量,缺省设为 2,以支持 Windows 2000 版本。 第二个选项控制 *.btm 文件是否被识别为 "dosbatch" 类型 (MS-DOS 批处理文件) 或 "btm" 类型 (4DOS 批处理文件)。缺省使用后者。下行可以让你选择前者: :let g:dosbatch_syntax_for_btm = 1 如果此变量无定义或为零,选择 btm 语法。 DOXYGEN *doxygen.vim* *doxygen-syntax* Doxygen 使用特殊的文档格式生成代码文档 (和 Javadoc 类似)。本语法脚本为 c、 cpp、idl 和 php 文件加入 Doxygen 的高亮,Java 应该也能用。 有几个办法可以打开 Doxygen 格式。首先,在文件的模式行上可以给 syntax 加入 ".doxygen",进行显式设置。示例: :set syntax=c.doxygen // vim:syntax=c.doxygen 对于 c、cpp 和 idl 文件,也可以设置全局或局部于缓冲区变量 load_doxygen_syntax 来自动完成这个操作。在 .vimrc 里加上 :let g:load_doxygen_syntax=1 有一些变量影响语法高亮,它们大多和非标准的高亮选项有关。 变量 缺省 效果 g:doxygen_enhanced_color g:doxygen_enhanced_colour 0 Doxygen 注释使用非标准的高亮。 doxygen_my_rendering 0 关闭 HTML 粗体、斜体和 html_my_rendering 下划线的高亮。 doxygen_javadoc_autobrief 1 如果为 0,关闭 Javadoc autobrief 色彩 高亮。 doxygen_end_punctuation '[.]' 匹配 brief 结束标点的正规表达式。 还有一些高亮组值得提提,你可以对它们进行配置。 高亮 效果 doxygenErrorComment 如果 code、verbatim 或 dot 段里丢失标点,注释 尾部的颜色。 doxygenLinkError 如果丢失 \link 段的 \endlink,注释尾部的颜色。 DTD *dtd.vim* *ft-dtd-syntax* DTD 语法高亮缺省是大小写敏感的。如果不想如此,在你的启动文件里加入以下一行: :let dtd_ignore_case=1 DTD 语法会把未知的标签高亮为错误。如果这很讨厌,在执行 dtd.vim 语法文件之前, 可以用以下设置来关闭: :let dtd_no_tag_errors=1 参数实体 (parameter entity) 的名字使用 'Type' 高亮组高亮,标点和 '%' 使用 'Comment'。参数实体的实例使用 'Constant' 高亮组高亮,定界符 % 和 ; 则使用 'Type' 高亮组。以下设置可以关闭这些设定: :let dtd_no_param_entities=1 xml.vim 也包含了 DTD 语法文件,用以高亮内嵌的 dtd。 EIFFEL *eiffel.vim* *ft-eiffel-syntax* 尽管 Eiffel 不是大小写敏感的,它的风格指南鼓励如此,而且语法高亮文件也鼓励这样 使用。这使得同一类名的高亮可以不同。如果你想关闭大小写敏感的语法高亮,在启动文 件里加上这行: :let eiffel_ignore_case=1 大小写对类名和注释里的 TODO 标记仍然有影响。 相反,要更严格的检查,加入以下诸行之一: :let eiffel_strict=1 :let eiffel_pedantic=1 设置 eiffel_strict 只会捕获以下五个预定义的单词错误的大小写: "Current"、 "Void"、"Result"、"Precursor" 和 "NONE"。用于警告它们可能被不小心用作特性或类 名。 设置 eiffel_pedantic 会非常严格地遵循 Eiffel 风格指南 (例如,大小写字母的任意 混合和其它过时的大写关键字的方法都会被捕获)。 如果希望使用小写版本的 "Current"、"Void"、"Result" 和 "Precursor",可以用 :let eiffel_lower_case_predef=1 而不用完全关闭大小写敏感的高亮方式。 一些编译器里已经能够实验性地处理 ISE 推荐的新的创建语法,要打开此语法: :let eiffel_ise=1 最后,有的供应商支持十六进制的常数。在你的启动文件里加上这行就可以处理它们 :let eiffel_hex_constants=1 ERLANG *erlang.vim* *ft-erlang-syntax* erlang 高亮支持 Erlang 语言 (ERicsson LANGuage)。 Erlang 是大小写敏感的,缺省的扩展名是 ".erl"。 如果你想关闭关键字高亮,在 .vimrc 里加上: :let erlang_keywords = 1 如果你想关闭内建函数的高亮,在 .vimrc 里加上: :let erlang_functions = 1 如果你想关闭特殊字符的高亮,在 .vimrc 里加上: :let erlang_characters = 1 FLEXWIKI *flexwiki.vim* *ft-flexwiki-syntax* FlexWiki 是基于 ASP.NET 的 wiki 包,从 http://www.flexwiki.com 可以获得。 多数常用的 FlexWiki 语法元素都提供了语法高亮。本文件类型插件脚本设置了若干局部 于缓冲区的选项,使 FlexWiki 页面的编辑更加便捷。因为 FlexWiki 把换行符看成新段 落的开始,所以本插件设置 'tw'=0 (无限行长),置位 'wrap' (回绕长行而不使用水平 滚动),也置位 'linebreak' (在 'breakat' 包含的字符而不是在屏幕最后一个字符上回 绕),等等。本插件也包含了一些键盘映射,但它们缺省是关闭的。 如果你打开键盘映射,"j" 和 "k" 和光标键就会在显示行间上下移动。为此,在 .vimrc 里加入: :let flexwiki_maps = 1 FORM *form.vim* *ft-form-syntax* FORM 文件里的语法元素的色彩方案使用缺省模式: Conditional、Number、Statement、 Comment、PreProc、Type 和 String。它遵循 1991 年版荷兰 CAN 组织 J.A.M. Vermaseren 编著的语言说明书 'Symbolic Manipulation with FORM'。 如果你想自己增加对缺省颜色的修改,需要重新定义以下语法组: - formConditional - formNumber - formStatement - formHeaderStatement - formComment - formPreProc - formDirective - formType - formString 注意 缺省,form.vim 语法文件使用相同的语法组里实现 FORM 预处理器命令和指令。 预定义的 FORM 增强色彩模式可以用来区别头部语句和 FORM 程序本体的语句。要激活此 模式,在你的 vimrc 文件里定义以下变量 :let form_enhanced_color=1 在深色 gvim 显示中,增强模式也利用了附加的色彩特性。这里,语句 (formStatement) 使用 LightYellow 而不是 Yellow。而条件句 (formConditional) 使 用 LightBlue,以达到更好的区分度。 FORTRAN *fortran.vim* *ft-fortran-syntax* 缺省高亮方式和方言 缺省使用适合 f95 (Fortran 95) 的高亮方式。这样的选择应该适用于绝大多数的用户, 因为 Fortran 95 是 Fortran 90 的超集,也差不多是 Fortran 77 的超集。 Fortran 源代码形式 Fortran 9x 可以使用固定宽度的源代码,也可以使用自由形式。注意如果形式设置错 误,语法高亮也不会正确。 创建新的 Fortran 文件时,语法脚本假定使用的是固定宽度的源代码。如果你总是使用 自由形式,那么在你的 .vimrc 里,把 :let fortran_free_source=1 放在 :syntax 命令前。如果你总是使用固定宽度格式,那么在你的 .vimrc 里,把 :let fortran_fixed_source=1 放在 .syntax 命令前。 如果源代码的格式取决于文件扩展名,那么最方便的方法是在 ftplugin 文件里设置 fortran_free_source。见 |ftplugin|。例如,假定你所有的使用 .f90 扩展名的 Fortran 文件使用自由形式编写,而其它的则使用固定宽度,那么在你的 ftplugin 文件 里加上以下的行 let s:extfname = expand("%:e") if s:extfname ==? "f90" let fortran_free_source=1 unlet! fortran_fixed_source else let fortran_fixed_source=1 unlet! fortran_free_source endif 注意,要使之工作,你需要在 .vimrc 文件的 "syntax on" 命令前加上 "filetype plugin indent on" 命令。 编辑已有的 Fortran 文件时,如果定义了 fortran_free_source 变量,语法脚本假定使 用自由形式,如果定义了 fortran_fixed_source 变量,则假定使用固定宽度形式。如果 两者都没有,语法脚本检验文件的头 250 行的头 5 列。如果没有发现自由形式的迹象, 那么假定文件为固定宽度形式的源文件。这个算法应该在绝大多数情况下适用。有的情况 下,比如文件的开始有 250 行或更多完整行的注释,该脚本也许会错误地认为该 Fortran 代码使用的是固定宽度形式。如果此种情况真的发生,只要在前 250 行的头 5 列里的任何地方加上一个非注释的语句,然后保存 (:w) 并重新读入 (:e!) 文件就可以 了。 Fortran 文件里的制表键 Fortran 标准不识别制表键。在固定宽度格式的 Fortran 源代码里,制表不是一个好主 意,因为需要固定的列边界。因此,制表被识别为错误。不过,有的程序员喜欢使用制 表。如果你的 Fortran 文件里包含制表,那么需要在 .vimrc 里使用这样的命令来设置 变量 fortran_have_tabs :let fortran_have_tabs=1 并把它放在 :syntax 命令之前。不幸的是,制表的使用意味着语法文件无法识别不正确 的边界。 Fortran 文件的语法折叠 如果你希望使用 foldmethod=syntax,那么你需要先使用命令设置变量 fortran_fold :let fortran_fold=1 来指示语法脚本为程序单元定义折叠区域。程序单元 (program unit) 包括程序语句开始 的主程序、子例程、函数子程序、块数据子程序、接口块和模块。如果你也使用如下命令 设置变量 fortran_fold_conditionals :let fortran_fold_conditionals=1 那么也会为 do 循环、if 块和 select case 构造定义折叠区域。如果你同时使用如下命 令设置变量 fortran_fold_multilinecomments :let fortran_fold_multilinecomments=1 那么还会为三行或更多连续的注释定义折叠区域。注意 定义折叠区域会使大文件变慢。 如果设置了 fortran_fold 和可能的 fortran_fold_conditionals 与/或 fortran_fold_multilinecomments,vim 会在你使用 foldmethod=syntax 时折叠文件。 两个程序单元之间的注释或空行不会被折叠,因为它们不被视作任何一个程序单元的一部 分。 更精确的 Fortran 语法 如果使用如下命令设置变量 fortran_more_precise :let fortran_more_precise=1 那么语法高亮会更精确,但也更慢。特别是,能够识别 do、goto 和算术 if 语句使用的 语句标签,还有 do、if、select、或 forall 构造结尾的构造名。 非缺省的 Fortran 方言 本语法脚本支持五种 Fortran 方言: f95、f90、f77、Lahey 子集 elf90 和 Imagine1 子集 F。 如果你使用扩展的 f77,包括常见的能被大多数 f77 编译器,包括 g77 (GNU Fortran) 所支持的构造,如 do/enddo 循环,do/while 循环和自由形式的源代码,那么也许缺省 的高亮设置就够用了。如果你使用严格的不带扩展的 f77,甚至没有自由形式的源代码或 者 MIL STD 1753 扩展等特性,那么设置 f77 方言的好处就包括,诸如 SUM 这样的名字 可以作为变量名识别,而不会作为高亮为 f9x 内建的函数;另外废弃的构造,比如 ASSIGN 语句,也不会被高亮为 todo 项目;还有,总是假定使用固定宽度的源程序。 如果你使用 elf90 或 F,设置合适的方言的优点包括,这些方言排除的 f90 特性会被高 亮为 todo 项目;还有,它们总是假定使用固定宽度的源程序。 可以通过设置变量 forran_dialect 来选择方言。可以接受的 fortran_dialect 的值是 大小写敏感的,而且必须是 "f95"、"f90"、"f77"、"elf" 或 "F" 之一。不合法的 fortran_dialect 的值被忽略。 如果你的 Fortran 文件使用相同的方言,在你的 .vimrc 文件里 syntax 命令之前设置 fortran_dialect。如果源代码的格式取决于文件扩展名,那么最方便的方法是在 ftplugin 文件里设置,见 |ftplugin|。例如,如果你使用 .f90 扩展名的所有 Fortran 文件都使用 elf 子集,那么在你的 ftplugin 文件里应该包含代码 let s:extfname = expand("%:e") if s:extfname ==? "f90" let fortran_dialect="elf" else unlet! fortran_dialect endif 注意 只有在你的 .vimrc 文件的 "syntax on" 命令前加上了 "filetype plugin indent on" 命令,才能使这段代码工作。 如果文件扩展名还不能唯一确定方言,那么你需要更精细的控制。可以为每个文件定制方 言。方法是在文件的头三行内加上指令 "fortran_dialect=xx" (其中 xx=f77 或 elf 或 F 或 f90 或 f95)。例如,你较老的 .f 文件可能以扩展 f77 方言编写,但较新的那些 可能使用 F,那么你需要在后者每个文件的头三行内加上以下形式的 Fortran 注释,以 便标识 ! fortran_dialect=F 如果两个指令都存在,F 覆盖 elf。 限制 括号检查不能发现过少的闭括号。也不能识别 Hollerith 字符串。有些关键字可能高亮 不正确,因为 Fortran90 没有保留字。 更多关于 Fortran 的信息可见 |ft-fortran-indent| 和 |ft-fortran-plugin|。 FVWM 配 置 文 件 *fvwm.vim* *ft-fvwm-syntax* 要使得 Vim 识别不符合模式 *fvwmrc**fvwm2rc* 的 Fvwm 配置文件,你需要在你 myfiletypes.vim 文件里放入附加适合你系统的模式。对于这些模式,你需要设置变量 "b:fvwm_version" 为 Fvwm 的主版本号,同时设置 'filetype' 选项为 fvwm。 例如,要使 Vim 识别 /etc/X11/fvwm2/ 里的所有文件为 Fvwm2 的配置文件,可以这样 设置: :au! BufNewFile,BufRead /etc/X11/fvwm2/* let b:fvwm_version = 2 | \ set filetype=fvwm 如果你想让 Vim 高亮所有的合法颜色名,告诉它如何找到在你的系统上颜色数据库 (rgb.txt)。设置 "rgb_file" 指向该文件就可以了。假如你的颜色数据库在 /usr/X11/lib/X11/,加入下行 :let rgb_file = "/usr/X11/lib/X11/rgb.txt" 到你的 .vimrc 文件里。 GSP *gsp.vim* *ft-gsp-syntax* GSP 页面的缺省色彩风格由 |html.vim| 定义,而 Java 代码 (在 Java 标签里或反引号 之间的内含代码) 的颜色由 |java.vim| 定义。 |html.vim| 里定义的以下 HTML 组在这 里被重新定义,以配合高亮的内含 (inline) Java 代码: htmlString htmlValue htmlEndTag htmlTag htmlTagN 多数你看到内含 Java 代码的地方,高亮应该没问题,但在一些特殊情况下可能有问题。 要加入其它可包含内含 Java 代码而高亮不正确的 HTML 组,只要从 |html.vim| 里把你 想要的行复制出来,并在 contains 子句里加上 gspJava 就可以了。 反引号里的内含 Java 使用 htmlError 组高亮,使之更易看清。 GROFF *groff.vim* *ft-groff-syntax* groff 语法文件是 |nroff.vim| 的包装,见该标题下的说明参阅使用和配置的示例。提 供这个包装的目的是通过 |modeline| 或个人的文件类型文件 (见 |filetype.txt|) 来 设置文件类型,从而设置 groff 专用的语法扩展。 HASKELL *haskell.vim* *lhaskell.vim* *ft-haskell-syntax* Haskell 语法文件支持普通的 Haskell 代码和文学的 (literate) Haskell 代码,后者 包括 Bird 风格和 Tex 风格。Haskell 语法高亮也能高亮 C 预处理指令。 如果你想高亮定界符 (适用于浅色背景),在 .vimrc 里加上: :let hs_highlight_delimiters = 1 要把 True 和 False 识别为关键字而不是普通的标识符,加上: :let hs_highlight_boolean = 1 要把基本类型的名字识别为关键字: :let hs_highlight_types = 1 要把更多相对常用的类型识别为关键字: :let hs_highlight_more_types = 1 如果想高亮调试函数的名字,在你的 .vimrc 里加上: :let hs_highlight_debug = 1 Haskell 语法高亮也高亮 C 预处理指令,但非法的 # 开始的指令被标记为错误。这和 Haskell 的操作符语法有冲突,因为它们可能会用 # 开始。如果你想高亮这些为操作符 而不是错误,在 .vimrc 里加入: :let hs_allow_hash_operator = 1 文学的 Haskell 代码的语法高亮会试图自动猜测你的文学 Haskell 代码是否包含 Tex 标记,并相应地高亮 Tex 构造或什么也不做。要在全局改变此行为,在你的 .vimrc 文 件里放上 :let lhs_markup = none 就可完全关闭高亮。或者 :let lhs_markup = tex 强制使用 Tex 标记风格的高亮。更灵活的方法是使用该变量的局部于缓冲区的版本,例 如 :let b:lhs_markup = tex 会强制为特定的缓冲区使用 TeX 高亮。必须在该缓冲区打开语法高亮或者载入文件前设 置。 HTML *html.vim* *ft-html-syntax* HTML 文件里,标签的色彩方案工作方式如下。 开放标签的 <> 和关闭标签的 </> 的颜色不同。这是有意的!开放标签使用 'Function' 色,而关闭标签使用 'Type' 色 (察看 syntax.vim 了解它们是如何为你定义的)。 已知的标签名使用 C 语句 (Statement) 的色彩。未知的标签名分别和相应的 <></> 颜色相同,以便纠错。 注意 这同样适用于参数 (或属性) 名。已知的属性名和未知的颜色不同。 一些 HTML 标签用于改变文本的显示。html.vim 语法色彩文件识别以下的标签,并相应 地改变普通文本的显示方式: <B> <I> <U> <EM> <STRONG> (<EM><I> 的别名,而 <STRONG><B> 的别名),<H1> - <H6><HEAD><TITLE><A> (<A> 必须在作为链 接,即包含了 href,才会如此。如 <A href="somefile.html">)。 如果你想改变文本显示的方式,必须重定义以下的语法组: - htmlBold - htmlBoldUnderline - htmlBoldUnderlineItalic - htmlUnderline - htmlUnderlineItalic - htmlItalic - htmlTitle 设定标题 - htmlH1 - htmlH6 设定标题头部 (header) 的文本 要使得重定义能够工作,你必须重定义所有的组,最后两组 (htmlTitle 和 htmlH[1-6] 可选) 可以除外。在你的 vimrc (这是根据初始化时读入文件的顺序) 里定义下面的变量 :let html_my_rendering=1 要想看一个例子,下载 http://www.fleiner.com/vim/download.html 的 mysyntax.vim 文件。 在你的 vimrc 文件里加上这行,可以屏蔽这种显示方式: :let html_no_rendering=1 HTML 注释相当特别 (详情见 HTML 的参考文档),此语法高亮方案会高亮所有的错误。不 过,如果你喜欢不太正确 (以 <!-- 开始并以 --!> 结束) 的风格,可以定义 :let html_wrong_comments=1 HTML 文档的内嵌 (embedded) JavaScript 和 Visual Basic 使用 'Special' 高亮,而 其中的语句、注释、字符串等使用标准的编程语言的颜色。注意 现在只支持 JavaScript 和 Visual Basic,还没有加入其它的脚本语言。 内嵌和内含 (inline) 的层叠样式表 (CSS) 也被高亮。 有多种 html 预处理器语言,html.vim 的编写方式使得包含它非常容易。要想这么做, 只要在相应语言的语法高亮文件里加入如下两行 (该例子来自 asp.vim 文件) 就可以了: runtime! syntax/html.vim syn cluster htmlPreproc add=asp 现在你只需要把所有包含预处理语言的区域项目加到 htmlPreproc 簇里就可以了。 HTML/OS (Aestiva 提供) *htmlos.vim* *ft-htmlos-syntax* HTML/OS 的色彩高亮方案工作方式如下: 缺省为函数和变量名使用相同的颜色,因为 VIM 并不为 Function 和 Identifier 指定 不同的颜色。要改变这一点 (如果你希望函数名能用不同的颜色加以识别的话,建议使 用),你需要在 ~/.vimrc 里加入下行: :hi Function term=underline cterm=bold ctermfg=LightGray 当然如果你愿意,ctermfg 可以使用别的颜色。 HTML/OS 碰到的另一个问题是没有特殊的指示 HTML/OS 编码的文件类型。打开文件并用 下面的方法打开 HTML/OS 语法,你就可以改变这一点: :set syntax=htmlos 最后要提醒一下,启动 HTML/OS 代码块的打开和关闭字符序列分别是 << 或 [[ 和 >> 或 ]]。 IA64 *ia64.vim* *intel-itanium* *ft-ia64-syntax* 为 Intel Itanium 64 汇编语言提供高亮。|asm.vim| 说明如何识别该文件类型。 要识别 *.inc 文件为 IA64,在你的 .vimrc 文件里加入这行: :let g:filetype_inc = "ia64" INFORM *inform.vim* *ft-inform-syntax* Inform 高亮包含 Inform 库提供的符号,因为多数程序大量使用它们。如果不希望高亮 这些库里的符号,在你的 vim 启动文件里加入: :let inform_highlight_simple=1 缺省假定 Inform 程序面向 Z 机器。并适当地高亮 Z 机器的汇编语言符号。如果期望程 序面向 Glulx/Glk 环境,你需要在启动文件的序列中加入: :let inform_highlight_glulx=1 这样就只高亮 Glulx 操作码,并把 glk() 加到高亮的系统函数集合里。 Inform 编译器遇到特定已废弃的关键字时,会标记它们为错误。通常,Vim 也把这些关 键字标为错误。如果不想高亮这些错误,你必须在启动文件的序列中加入: :let inform_suppress_obsolete=1 缺省的高亮设置符合编译器版本 6.30 和库版本 6.11 的语言特性。如果你使用较老的 Inform 开发环境,可能需要在启动文件的序列中加入: :let inform_highlight_old=1 IDL *idl.vim* *idl-syntax* IDL (Interface Definition Language,接口定义语言) 文件用于定义 RFC 调用。 Microsoft 的领地里也用来定义 COM 接口和调用。 IDL 的结构足够简单,所以可以分析完整语法,而不需要一些启发式的猜测。结果很大, 甚至可能有些重复工作,但看来能用了。 这里有一些 Microsft 的 idl 文件扩展。有些可以通过 idl_no_ms_extensions 关闭。 更复杂的扩展可以通过定义 idl_no_extensions 来关闭。 变量 效果 idl_no_ms_extensions 关闭一些 Microsoft 专用的扩展 idl_no_extensions 关闭复杂扩展 idlsyntax_showerror 显示 IDL 错误 (可能过于侵略性,但很有用) idlsyntax_showerror_soft 使缺省的错误颜色柔和一些 JAVA *java.vim* *ft-java-syntax* java.vim 语法高亮文件提供若干选项: 在 Java 1.0.2 里,小括号里不可能有大括号,所以这被标识为错误。但从 Java 1.1 开 始,这是合法的 (无名类的使用),因而它不再标为错误。如果你喜欢旧的方式,在 vim 启动文件里加入下行: :let java_mark_braces_in_parens_as_errors=1 所有 java.lang.* 的标识符在所有的类里都是可见的。要高亮它们,可用: :let java_highlight_java_lang_ids=1 如果你从 http://www.fleiner.com/vim/download.html 下载 javaid.vim 脚本,你也可 以高亮大多数标准 java 包里的标识符。 如果你只想高亮特定包里的标识符,比如说 java.io,可以用: :let java_highlight_java_io=1 察看 javaid.vim 文件,可以得到它支持的所有包的列表。 函数名不会高亮,因为找到函数的方法取决于你如何写 Java 代码。语法文件知道两种可 以高亮函数的方法: 如果你的函数定义总是使用一个制表、8 个空格或者 2 个空格的缩进,可以设置 :let java_highlight_functions="indent" 不过,如果你遵循 Java 指南里函数和类的命名规则 (关于大小写),就可以用 :let java_highlight_functions="style" 如果两个选项都不合适,但你仍然期望高亮函数声明,修改 java.vim 里的定义或者创建 你自己的 java.vim。你自己的版本应该包含原来的版本,并增加高亮函数的代码。 Java 1.1 里,只应该用函数 System.out.println() 和 System.err.println() 来进行 调试。所以你可以用不同的方式高亮调试语句。要这么做,你必须在启动文件里加上以下 定义: :let java_highlight_debug=1 结果那些语句会被高亮为 'Special' 字符序列。如果你喜欢用不同的方式分别高亮,必 须为以下各组定义新的高亮: Debug、DebugSpecial、DebugString、DebugBoolean、DebugType 它们分别用来高亮语句本身,调试字符串里的特殊字符、字符串、布尔常量和类型 (this,super)。我本人喜欢给语句设置别的背景。 为了帮助你编写在 Java 和 C++ 之间容易移植的代码,可以在 Java 程序里把所有的 C++ 关键字标为错误。为此,在 .vimrc 文件里定义如下变量: :let java_allow_cpp_keywords = 0 Javadoc 是一个程序,它接受特殊的 Java 程序文件里的注释,并创建 HTML 页面。标准 的配置会以类似于 HTML 文件 (见 |html.vim|) 方式高亮该 HTML 代码,你甚至可以在 代码里加入 Javascript 和 CSS (见下)。但有四处不同: 1. 标题 (第一个后面有若干空白跟随的 '.' 或第一个 '@' 之前的所有字符) 使用不 同的颜色 (要改变其颜色,修改 CommentTitle 组)。 2. 文本使用 'Comment' 高亮。 3. HTML 注释使用 'Special' 高亮。 4. 特殊的 Javadoc 标签 (@see、@param、...) 用 Special 高亮。 而 ( @see、 @param、@exception 的)参数则使用 Function 高亮。 要关闭该特性,在你的启动文件里加入该行: :let java_ignore_javadoc=1 如果你使用上述的特殊 Javadoc 注释高亮方式,你也可以打开 Javascript、Visual Basic 脚本和内嵌 CSS (样式表) 的特殊高亮。只有在你实际有包含 Javascript 或内 嵌 CSS 的 Javadoc 注释时,这才有意义。要使用的选项分别是 :let java_javascript=1 :let java_css=1 :let java_vb=1 要以不同的颜色高亮嵌套的括号,分别定义 javaParen、javaParen1 和 javaParen2 的 颜色。比如用 :hi link javaParen Comment :hi javaParen ctermfg=blue guifg=#0000ff 如果你注意到往回滚动时,高亮出现问题,但 CTRL-L 重画又可以修正的话,尝试设置 "java_minlines" 内部变量为较大的值: :let java_minlines = 50 这使得语法同步在第一个显示行之前的 50 行开始。缺省值为 10。使用较大的值的缺点 是重画会变慢。 LACE *lace.vim* *ft-lace-syntax* Lace (Language for Assembly of Classes in Eiffel,Eiffel 类整合语言) 对大小写 不敏感,但风格指南不是这么建议的。如果你喜欢对大小写不敏感的高亮,在启动文件里 定义 vim 变量 'lace_case_insensitive': :let lace_case_insensitive=1 LEX *lex.vim* *ft-lex-syntax* Lex 使用强力攻击 (brute-force) 的方式进行同步,因为 "^%%$" 段定界符没有提供任 何关于后续段的提示。因而,如果用户有同步问题的话 (比如使用很大的 lex 文件), 他/她可以尝试改变 :syn sync minlines=300 的值。 LISP *lisp.vim* *ft-lisp-syntax* Lisp 语法高亮提供两个选项: g:lisp_instring : 如果存在,那么 "(...)" 字符串会被高亮,就像字符串里 的内容是 Lisp 代码一样。对 AutoLisp 有用。 g:lisp_rainbow : 如果存在且非零,那么不同的括号层次产生不同的高亮。 g:lisp_rainbow 选项为小括号和反引号提供 10 层不同的色彩。因为色彩层次的数量关 系,不同于非 rainbow (彩虹) 方式,rainbow 模式直接使用 ctermfg 和 guifg 指定高 亮色彩,而回避了标准的使用高亮组的色彩方案控制。实际使用的高亮值仍然取决于深/ 浅设置 (见 |'bg'|)。 LITE *lite.vim* *ft-lite-syntax* lite 语法高亮有两个选项。 如果你喜欢字符串里的 SQL 语法高亮,使用: :let lite_sql_query = 1 同步的缺省 minlines 为 100。如果你喜欢别的值,可以把 "lite_minlines" 设为你想 要的值。例如: :let lite_minlines = 200 LPC *lpc.vim* *ft-lpc-syntax* LPC 代表一种简单又节省内存的语言: Lars Pensj| C。LPC 的文件名通常是 *.c。把这 些文件识别为 LPC 会惹恼那些只用 C 程序的用户。如果你想使用 Vim 的 LPC 语法,在 你的 .vimrc 文件里设置变量: :let lpc_syntax_for_c = 1 如果这对某些特殊的 C 或 LPC 文件不能工作,用模式行。在 LPC 文件里: // vim:set ft=lpc: 对于被识别为 LPC 的 C 文件: // vim:set ft=c: 如果你不想设置此变量,在_每个_ LPC 文件里使用模式行。 LPC 有若干实现,我们打算支持最常用的实现。这里缺省的 LPC 语法基于 MudOS 系列。 对于 MudOS v22 和以前的版本。你应该关闭合适的修饰符,它也会把 v22 之后的新的 efun 认定为非法。如果你使用最新的 MudOS 版本,不要设置该变量: :let lpc_pre_v22 = 1 对于 LpMud 3.2 系列的 LPC: :let lpc_compat_32 = 1 对于 LPC4 系列的 LPC: :let lpc_use_lpc4_syntax = 1 对于 uLPC 系列的 LPC: uLPC 是为 Pike 开发的,所以你应该使用 Pike 的语法,而且源文件应该是 *.pike。 LUA *lua.vim* *ft-lua-syntax* 该语法文件可用于 Lua 4.0、Lua 5.0 或 Lua 5.1 (缺省)。用全局变量 lua_version 和 lua_subversion 可以选择其中一个版本。例如,如果要激活 Lua 4.0 语法高亮,用: :let lua_version = 4 如果你使用 Lua 5.0,用: :let lua_version = 5 :let lua_subversion = 0 要恢复 Lua 5.1 的高亮: :let lua_version = 5 :let lua_subversion = 1 MAIL *mail.vim* *ft-mail.vim* Vim 高亮 email 的所有标准元素 (信头、签名、引用文本和 URL / email 地址)。要符 合标准的习惯,签名应该以 "--" 开头,跟随可选的若干空格并以回车结束的一行开始。 Vim 把 ']'、'}'、'|'、'>' 或者有 '>' 跟随的单词开始的行高亮为引用文本。不过, 只有在引用文本用 '>' 的方式引用 (后面可跟一个可选的空格),Vim 才把把该文本里的 信头和签名高亮为引用文本。 mail.vim 缺省从第一个显示行之前的 100 行开始同步语法。如果你的机器很慢,而且通 常处理的 email 的信头不长,你可以把它设为较小的值: :let mail_minlines = 30 MAKE *make.vim* *ft-make-syntax* Makefile 里,命令通常被高亮以便你发现错误。不过,如果你觉得颜色太多了,可以这 样关闭此特性: :let make_no_commands = 1 MAPLE *maple.vim* *ft-maple-syntax* Waterloo Maple Inc 的 Maple V 支持符号代数。该语言支持很多函数包,用户可以选择 性地装载。如果用户愿意,可以高亮 Maple V release 4 提供的标准包函数。用户可以 在 .vimrc 文件里加入: :let mvpkg_all= 1 来高亮所有的包里的函数。用户也可以通过从下表选择变量/包来挑选一个子集,并在 .vimrc 文件里 (在执行 $VIMRUNTIME/syntax/syntaxvim 之前) 设置挑选的变量为 1 就 可以了。 Maple V 包函数选择器表 mv_DEtools mv_genfunc mv_networks mv_process mv_Galois mv_geometry mv_numapprox mv_simplex mv_GaussInt mv_grobner mv_numtheory mv_stats mv_LREtools mv_group mv_orthopoly mv_student mv_combinat mv_inttrans mv_padic mv_sumtools mv_combstruct mv_liesymm mv_plots mv_tensor mv_difforms mv_linalg mv_plottools mv_totorder mv_finance mv_logic mv_powseries MATHEMATICA *mma.vim* *ft-mma-syntax* *ft-mathematica-syntax* 自动假设空白的 *.m 文件为 Matlab 文件,除非你在 .vimrc 里指定了: let filetype_m = "mma" MOO *moo.vim* *ft-moo-syntax* 如果你在表达式里使用 C 风格的注释但发现它影响了高亮,可以尝试使用扩展的 (会变 慢!) C 风格注释的匹配: :let moo_extended_cstyle_comments = 1 要关闭字符串里的代词替换 (pronoun substitution) 模式高亮: :let moo_no_pronoun_sub = 1 要关闭正规表达式 '%|' 操作符和字符串里匹配的 '%(' 和 '%)' 所用的高亮: :let moo_no_regexp = 1 可以识别不匹配的双引号并高亮为错误: :let moo_unmatched_quotes = 1 要高亮内建的属性 (.name、.location、.programmer 等): :let moo_builtin_properties = 1 可以识别未知的内建函数并高亮为错误。如果你使用该选项,应该把自己的扩展加到 mooKnownBuiltinFunction 组里。要打开该选项: :let moo_unknown_builtin_functions = 1 把 sprintf() 加到已知内建函数列表的例子: :syn keyword mooKnownBuiltinFunction sprintf contained MSQL *msql.vim* *ft-msql-syntax* msql 语法高亮有两个选项。 如过你希望高亮字符串里的 SQL 语法,使用: :let msql_sql_query = 1 同步的 minlines 缺省为 100。如果你喜欢别的值,可以设置 "msql_minlines" 为你所 希望的值。例如: :let msql_minlines = 200 NCF *ncf.vim* *ft-ncf-syntax* NCF 语法高亮有一个选项。 如果你想把不能识别的 (依据 ncf.vim) 语句高亮为错误,使用: :let ncf_highlight_unknowns = 1 如果你不想高亮它们为错误,留着该变量不设置就可以了。 NROFF *nroff.vim* *ft-nroff-syntax* nroff 语法文件可直接用于 AT&T n/troff 而无需修改。如果要使用 GNU groff,你需要 在使用之前激活语法文件里的一些附加特性。 例如,Linux 和 BSD 的发布版本使用 groff 作为缺省的文本处理包。要激活 groff 附加的语法高亮特性,在你的启动文件里加入以下选项: :let b:nroff_is_groff = 1 Groff 和老的 AT&T n/troff 不同,后者还可以在 Solaris 找到。Groff 宏和请求名可 以超过 2 个字符,而且有语言基本命令之外的扩展。例如,AT&T troff 里你可以用请求 \(yr 得到 2 位数的年份。groff 里为了照顾兼容性,可以使用相同的请求,你也可以直 接使用 groff 本身的宏: \[year]。宏请求可以超过 2 个字符,比如,GNU mm 接受 ".VERBON" 和 ".VERBOFF" 请求,以创建 verbatim (不作转换的) 环境。 要得到 g/troff 能给出的最好的输出,需要遵循一些关于空格和标点的简单的规则。 1. 不要在行尾留空白。 2. 在句尾的句号、感叹号等之后留且只留一个空格。 3. 由于下面的原因,最好在所有的句号之后立即回车。 这些不寻常的提示的背后原因是,如果你不遵循上面的这些规则,g/n/troff 使用的换行 算法很容易弄错。 和 TeX 不同,troff 逐行而不是逐段填充文本。此外,它没有 glue (可伸缩的距离) 或 stretch 的概念,所有的水平和垂直空白输入都直接成为输出。 因此你必须小心,不要在句子之间留下比你在最终文档想要的更多的空白。因此,通常在 每个标点符号之后都立即插入一个回车。如果你想要最终处理过的文本 "对齐",需要在 输入文本里维持常规的空间。要把行尾的空格和标点之后两个或更多的空格标为错误,可 用: :let nroff_space_errors = 1 另一个检测额外的空格和其它错误的技术会影响你文件的正确排版。这个方法是在你的配 置文件里定义语法组 "nroffDefinition" 和 "nroffDefSpecial" 显眼的高亮定义。例 如: hi def nroffDefinition term=italic cterm=italic gui=reverse hi def nroffDefSpecial term=italic,bold cterm=italic,bold \ gui=reverse,bold 如果你想像段标记符那样方便地浏览源文件里的预处理项目,可以在 .vimrc 文件里激活 以下选项: let b:preprocs_as_sections = 1 还有,语法文件为 ms 包里设置带缩进的 (exdented) 段落宏 (.XP) 增加了一个附加的 段标记符。 最后,有一个 |groff.vim| 语法文件,可以基于每个文件或,缺省情况下,在全局打开 groff 的语法高亮。 OCAML *ocaml.vim* *ft-ocaml-syntax* OCaml 语法文件处理带以下后缀的文件: .ml、.mli、.mll 和 .mly。设置以下变量 :let ocaml_revised = 1 你就可以切换标准的 OCaml 语法为 camlp4 预处理器支持的改进的语法。设置变量 :let ocaml_noend_error = 1 防止把 "end" 高亮为错误,这可用于源程序包含很长的结构而 Vim 不再能保持同步的场 合。 PAPP *papp.vim* *ft-papp-syntax* PApp 语法文件处理 .papp 文件和,在一定程度上,.pxml 和 .pxsl 文件。它们都是 perl / xml / html / 其它格式 的混合,并使用 xml 作为顶层的文件格式。缺省,所有 phtml 和 pxml 段里的内容都被处理为包含内嵌预处理器命令的字符串。如果你在启动文 件里设置变量: :let papp_include_html=1 它就会试图语法高亮 pthml 段里的 html 代码,但这相对较慢,而且对于有效的编辑未 免色彩太鲜艳了些 ;) 可以在 http://papp.plan9.de 找到最新的 papp.vim 语法文件的版本。 PASCAL *pascal.vim* *ft-pascal-syntax* 匹配 "*.p" 的文件可以是 Progress 或者 Pascal 的。如果自动检测对你不适用,或者 你从来不编辑 Progress,在启动 vimrc 里加入: :let filetype_p = "pascal" Pascal 语法文件被扩展,以支持 Turbo Pascal、Free Pascal 编译器和 GNU Pascal 编 译器的一些扩展。也支持 Delphi 的关键字。缺省打开 Turbo Pascal 7.0 特性。如果你 只想使用标准的 Pascal 关键字,在你的启动文件里加入下行: :let pascal_traditional=1 要打开 Delphi 专用的构造 (比如单行注释、关键字、等等): :let pascal_delphi=1 pascal_symbol_operator 选项控制符号 (symbol) 操作符,如 +、* 等,是否使用 Operator 的色彩高亮。要给符号的操作符加上颜色,在你的启动文件里加入下行: :let pascal_symbol_operator=1 有些函数缺省是高亮的。要关闭: :let pascal_no_functions=1 另外,一些编译器有专门的变量。除了 pascal_delphi 以外,还有 pascal_gpc 和 pascal_fpc。缺省试图匹配 Turbo Pascal 的扩展。 :let pascal_gpc=1 :let pascal_fpc=1 要确保字符串在一行内定义,你可以定义 pascal_one_line_string 变量。 :let pascal_one_line_string=1 如果你不喜欢 <Tab> 字符,你可以设置 pascal_no_tabs 变量。制表会被高亮为 Error。 :let pascal_no_tabs=1 PERL *perl.vim* *ft-perl-syntax* perl 的语法高亮有一些可用的选项。 如果你使用 POD 文件或者 POD 段,可能会: :let perl_include_pod = 1 要减低分析的复杂度 (同时提高了效率),你可以关闭变量名和内容的分析过程的两个元 素。 要使变量和函数名里对包的引用与名字的其它部分不区别显示 (如 '$PkgName::VarName' 里的 'PkgName::'): :let perl_no_scope_in_variables = 1 (Vim 6.x 里相反,用 "perl_want_scope_in_variables" 打开区别显示。) 如果你不想分析复杂的结构,比如 '@{${"foo"}}': :let perl_no_extended_vars = 1 (Vim 6.x 里相反,用 "perl_extended_vars" 打开此项分析。) 你可以改变颜色字符串。缺省,字符串和 qq 等变形会象下面第一行那样高亮。如果你设 置了变量 perl_string_as_statement,那么就像下面第二行那样高亮。 "hello world!"; qq|hello world|; ^^^^^^^^^^^^^^NN^^^^^^^^^^^^^^^N (unlet perl_string_as_statement) S^^^^^^^^^^^^SNNSSS^^^^^^^^^^^SN (let perl_string_as_statement) (^ = perlString、S = perlStatement、N = 什么都没有) 同步有三个选项。前两个关掉一些激活同步的方法,而只有在无法正确工作的时候你才需 要它们。比如,如果滚动时突然全屏的颜色发生改变,那么你应该尝试改变并关闭其中的 某一个。如果你可以发现哪一行导致这种错误,请告诉我。 大致上,其中一个在 "^\s*sub\s*" 上激活,另一个则在 "^[$@%]" 上。 :let perl_no_sync_on_sub :let perl_no_sync_on_global_var 下面,你还可以设置 VIM 往前找语法高亮的起始点的最大距离。 :let perl_sync_dist = 100 如果你想要在 perl 里使用折叠,设置 perl_fold: :let perl_fold = 1 如果你想折叠 if 等语句块,设置如下: :let perl_fold_blocks = 1 要避免设置 perl_fold 时对 package (包) 和 sub (例程) 进行折叠,设置合适的变 量: :unlet perl_nofold_packages :unlet perl_nofold_subs PHP3 和 PHP4 *php.vim* *php3.vim* *ft-php-syntax* *ft-php3-syntax* [注意: 以前这被称为 "php3",但因为现在这也支持 php4,它被改名为 "php"] php 的语法高亮支持以下选项。 如果你喜欢字符串里的 SQL 语法高亮: let php_sql_query = 1 要高亮 Baselib 方法: let php_baselib = 1 打开字符串里的 HTML 语法高亮: let php_htmlInStrings = 1 使用旧的色彩风格: let php_oldStyle = 1 打开 ASP 风格的短标签的高亮: let php_asp_tags = 1 关闭短标签: let php_noShortTags = 1 要高亮外层 ] 或 ) 的错误: let php_parent_error_close = 1 要在有打开的 ( 和 [ 但没有相应的结束符号的情况下跳过 php 结束标签: let php_parent_error_open = 1 打开类和函数的折叠: let php_folding = 1 选择同步方法: let php_sync_method = x x = -1 使得同步以搜索方法进行 (缺省), x > 0 使得同步至少往回 x 行, x = 0 使得同步从头开始。 PLAINTEX *plaintex.vim* *ft-plaintex-syntax* TeX 是排版语言,而 plaintex 是代表 Tex 的 "平凡" 变种的文件类型。如果你想 *.tex 文件被识别为平凡 TeX,见 |ft-tex-plugin|。 此语法文件有以下选项 let g:plaintex_delimiters = 1 如果你想高亮方括号 "[]" 和大括号 "{}" 的话。 PPWIZARD *ppwiz.vim* *ft-ppwiz-syntax* PPWizard 是 HTML 和 OS/2 INF 文件的预处理器。 该语法文件有如下选项: - ppwiz_highlight_defs : 决定 PPWizard 定义的高亮模式。可能值是 ppwiz_highlight_defs = 1 : PPWizard #define 语句保留其内容的色彩 (比如, PPWizard 的宏和变量) ppwiz_highlight_defs = 2 : 预处理器 #define 和 #evaluate 语句使用单色显示, 除了续行符以外 缺省 ppwiz_highlight_defs 的设置为 1。 - ppwiz_with_html : 如果该值为 1 (缺省),高亮按本义出现的 HTML 代码;如果为 0,把 HTML 代码当成普通的文本。 PHTML *phtml.vim* *ft-phtml-syntax* phtml 语法高亮有两个选项。 如果你喜欢字符串里的 SQL 语法高亮,使用: :let phtml_sql_query = 1 同步的 minlines 缺省为 100。如果你喜欢别的值,可以设置 "phtml_minlines" 为你所 希望的值。例如: :let phtml_minlines = 200 POSTSCRIPT *postscr.vim* *ft-postscr-syntax* PostScript 的高亮有若干选项。 首先决定是 PostScript 语言的哪个版本要高亮。目前定义了三个语言版本。Level 1 是 原始和基础的版本,包括所有的 Level 2 发布之前的扩展。Level 2 是最常用的版本, 包括 Level 3 发布之前它自身的所有扩展。Level 3 是目前支持的最高版本。你可以 这样定义 postscr_level 变量,以选择需要高亮的 PostScript 的语言级别: :let postscr_level=2 如果该变量没有定义,缺省值为 2 (Level 2),因为这是目前最常用的版本。 注意,不是所有的 PS 解释器都支持某一特定语言级别的所有语言特性。特别是,PS 文 件开头的 %!PS-Adobe-3.0 并_不_意味着使用的 PostScript 是 Level 3 的 PostScript! 如果你使用 Display PostScript,可以这样定义 postscr_display 变量来包含 Display PS 语言特性的高亮: :let postscr_display=1 如果你使用 Ghostscript,可以这样定义 postscr_ghostscript 变量来包含 Ghostscript 特有的语言特性的高亮: :let postscr_ghostscript=1 PostScript 是一个很大的语言,有许多预定义的元素。尽管包含所有这些元素的高亮很 有用,在较慢的机器上这会使得 Vim 变慢。为了使得对机器更友善,缺省不给字体名和 字符编码高亮。如果你不是显式地打开它们,应该没有问题。如果你确实想看到它们的高 亮,可以设置下面之中的一个或两个变量: :let postscr_fonts=1 :let postscr_encodings=1 关于 and、or 和 not 的高亮有一个风格的选项。PostScript 里,这些操作符的函数取 决于它们操作数的类型 - 如果操作数都是布尔型,它们是逻辑操作符。如果是整数,它 们是二进制操作符。如果二进制和布尔型操作符高亮方式不同,它们可以用任何一种方式 高亮。缺省它们被作为逻辑操作符。如果这样定义 postscr_andornot_binary 变量,它 们可以用二进制操作符方式进行高亮: :let postscr_andornot_binary=1 *ptcap.vim* *ft-printcap-syntax* PRINTCAP + TERMCAP *ft-ptcap-syntax* *ft-termcap-syntax* 该语法文件适用于 printcap 和 termcap 数据库。 要使得 Vim 识别不匹配模式 "printcap" 或 "termcap" 的 printcap/termcap 文件,你 需要在 |myfiletypefile| 文件里定义合适你的系统的附加的模式。对这些模式,你必须 设置变量 "b:ptcap_type" 为 "print" 或 "term",然后设置 'filetype' 选项为 ptcap。 比如,要使得 Vim 识别 /etc/termcaps/ 里的所有文件为 termcap 文件,加入下行: :au BufNewFile,BufRead /etc/termcaps/* let b:ptcap_type = "term" | \ set filetype=ptcap 如果你注意到往回滚动时高亮有问题,但 CTRL-L 又可以修正的时候,尝试设置 "ptcap_minlines" 内部变量为一个大的数字: :let ptcap_minlines = 50 (缺省为 20 行。) PROGRESS *progress.vim* *ft-progress-syntax* 匹配 "*.w" 的文件可以是 Progress 或者 cweb 的。如果自动识别对你无效,或者你从 来不编辑 cweb,在你的启动 vimrc 里加入: :let filetype_w = "progress" 这同样适用于可为汇编文件的 "*.i" 和可为 Pascal 文件的 "*.p"。如果你不使用汇编 和 Pascal,你可以这么用: :let filetype_i = "progress" :let filetype_p = "progress" PYTHON *python.vim* *ft-python-syntax* 有四个选项可以控制 Python 的语法高亮。 要高亮数值: :let python_highlight_numbers = 1 要高亮内建函数: :let python_highlight_builtins = 1 要高亮标准例外: :let python_highlight_exceptions = 1 要高亮行尾的空白还有空格和制表的混合: :let python_highlight_space_errors = 1 如果你想要所有可能的 Python 高亮 (等同于设置以上的所有选项): :let python_highlight_all = 1 QUAKE *quake.vim* *ft-quake-syntax* Quake 语法定义应可用于多数基于某个 Quake 引擎的 FPS (First Person Shooter)。不 过,在相关的三个游戏 (Quake、Quake 2 和 Quake 3 Arena) 中,命令的名字略有不 同。所以,语法定义检查三个全局变量是否存在,从而使用户可以指定他们的文件里哪些 命令是合法的。这三个变量的设置有如下效果。 设置使得高亮命令只适用于 Quake: :let quake_is_quake1 = 1 设置使得高亮命令只适用于 Quake 2: :let quake_is_quake2 = 1 设置使得高亮命令只适用于 Quake 3 Arena: :let quake_is_quake3 = 1 组合这三个变量的使用也是可以的,不过高亮的命令也许比你的游戏里实际可用的命令要 多。 READLINE *readline.vim* *ft-readline-syntax* readline 库主要由 BASH 外壳使用,在已有的命令和选项的基础上,它又增加了不少。 要高亮这些附加的命令和选项,可以把这行加到你的 |vimrc| 里,或者在载入使用 readline 语法的文件前,在命令行输入: let readline_has_bash = 1 这使得 BASH (2.05a 和其后的版本,也包括部分以前的) 增加的命令被高亮。 REXX *rexx.vim* *ft-rexx-syntax* 如果你注意到往回滚动时,高亮出现问题,但 CTRL-L 重画又可以修正的话,尝试设置 "rexx_minlines" 内部变量为较大的值: :let rexx_minlines = 50 这使得语法同步在第一个显示行之前的 50 行开始。缺省值为 10。使用较大的值的缺点 是重画会变慢。 RUBY *ruby.vim* *ft-ruby-syntax* Ruby 语法高亮有若干选项。 缺省,"end" 关键字根据它关闭的块对应的打开语句设定颜色。尽管很有用,该特性很消 耗资源: 如果你发现重画变慢 (或者你所在的终端色彩支持不好),你可能想关闭该特 性,只要定义 "ruby_no_expensive" 变量即可: :let ruby_no_expensive = 1 此时,所有的控制关键字使用相同的颜色。 如果你想使用该特性,但注意到往回滚动时,高亮出现问题,但 CTRL-L 重画又可以修正 的话,尝试设置 "ruby_minlines" 变量超过 50: :let ruby_minlines = 100 理想的话,该值应该足够大,使得最大的类或模块能够得到处理。 特殊标识符的高亮可以通过删除 rubyIdentifier 高亮来关闭: :hi link rubyIdentifier NONE 这会防止标识符 "ConstantName" (常数)、"$global_var" (全局变量)、"@@class_var" (类变量)、"@instance_var" (实例变量)、"| block_param |" (块参数)、和 ":symbol" (符号) 的特殊高亮。 Kernel、Module 和 Object 里的主要方法缺省都是高亮的。可以通过定义 "ruby_no_special_methods" 关闭之: :let ruby_no_special_methods = 1 这会禁止重要方法的高亮,比如 "require"、"attr"、"private"、"raise" 和 "proc"。 可以高亮 Ruby 操作符。可通过定义 "ruby_operators" 来打开: :let ruby_operators = 1 可以通过定义 "ruby_space_errors" 打开空白错误的高亮: :let ruby_space_errors = 1 会高亮行尾的空白,而空格后的制表也被认为是错误。通过定义 "ruby_no_trail_space_error" 和 "ruby_no_tab_space_error",可以进一步限定。这两 个变量分别忽略行尾空白和空格之后的制表。 定义 "ruby_fold" 可以打开折叠: :let ruby_fold = 1 会把 'foldmethod' 选项设为 "syntax",并且提供了类、模块、方法、代码块、here 文 档和注释的折叠。 多行注释的折叠可以通过定义 "ruby_no_comment_fold" 来关闭: :let ruby_no_comment_fold = 1 SCHEME *scheme.vim* *ft-scheme-syntax* 缺省只高亮 R5RS 关键字并进行适当的缩进。 如果定义 b:is_mzscheme 或 g:is_mzscheme 变量,可以使用 MzScheme 特定的内容。 此外,scheme.vim 也支持 Chicken Scheme->C compiler 的关键字。如果需要,定义 b:is_chicken 或 g:is_chicken。 SDL *sdl.vim* *ft-sdl-syntax* SDL 的高亮可能会缺少一些关键字,但 SDL 的关键字太多了,完全照顾过来是不太可能 的。 新的标准 SDL-2000 指定所有的标识符都是大小写敏感的 (以前并非如此),而所有使用 的关键字必须或者是完全小写,或者完全大写。要使得高亮能够反映这些特性,你可以设 置如下的变量: :let sdl_2000=1 这也会设置很多新的关键字。如果你想屏蔽旧的关键字 (其实,这是个好主意),可以 用: :let SDL_no_96=1 缩进可能还没完全处理好,不过我在自己的项目目前的应用里已经相当满意了。 SED *sed.vim* *ft-sed-syntax* 要使得制表在普通的空白里突出显示 (方法是在制表上使用 Todo 高亮),在 vimrc 文件 里如此定义 "highlight_sedtabs" :let highlight_sedtabs = 1 (这种特殊高亮只适用于搜索模式、替换文本、地址或者 Append/Change/Insert 命令里包含的文本中的制表。) 如果你打开该选项,那么最好把制表宽度设为一个字符; 这么做,你很容易计算字符串里的制表数量。 漏洞: transform 命令 (y) 和 substitute 命令的处理相同。也就是说,就语法文件而言, transform 和 substitute 接受相同的标志。这不正确 (Transform 不接受标志)。但 我容忍这个问题,因为牵涉的命令需要很复杂的处理 (95 个模式,每个可能的模式定 界符就需要一个模式)。 SGML *sgml.vim* *ft-sgml-syntax* SGML 文件里,标签的色彩方案工作方式如下。 开放标签的 <> 和关闭标签的 </> 的色彩不同。这是有意的。开放标签使用 'Function' 色彩,而关闭标签使用 'Type' 色彩 (见 syntax.vim 察看它们是怎么定义的)。 已知的标签名和 C 语句的色彩相同。未知的标签名和相应的 <></> 颜色相同,以便 纠错。 注意 这也适用于参数 (或属性) 的名字。已知的属性名和未知的标色不同。 一些 SGML 标签用于改变文本的显示。sgml.vim 语法色彩文件识别以下的标签,并相应 地改变普通文本的显示方式: <varname> <emphasis> <command> <function> <literal> <replaceable> <ulink><link>。 如果你想改变文本显示的方式,必须重定义以下的语法组: - sgmlBold - sgmlBoldItalic - sgmlUnderline - sgmlItalic - sgmlLink 设定链接 要使得重定义能够工作,你必须重定义所有的组。在你的 vimrc (这是根据初始化时读入 文件的顺序) 里定义下面的变量 :let sgml_my_rendering=1 在你的 vimrc 文件里加上这行,可以屏蔽这种显示方式: :let sgml_no_rendering=1 (从 Claudio Fleiner <claudio@fleiner.com> 的 html.vim 的帮助文本转来) SH *sh.vim* *ft-sh-syntax* *ft-bash-syntax* *ft-ksh-syntax* 这里讨论 "普通的" Unix 外壳,即 (Bourne) sh、bash 和 Korn shell。 (译者注: 原文作 Borne Shell。似为拼写错误,因为 Steve Bourne 是 sh 的作者) Vim 试图根据文件名决定使用的 shell 类型: ksh : .kshrc* *.ksh bash: .bashrc* bashrc bash.bashrc .bash_profile* *.bash 如果这些都不符,那么就检查文件的第一行 (比如 /bin/sh /bin/ksh /bin/bash)。如 果第一行指定了外壳类型,那么就使用该类型。不过有的文件 (比如 .profile) 肯定是 外壳文件,但其类型并不容易推出。另外,有的系统里 sh 被符号链接到 "bash" (linux、Windows+cygwin) 或 "ksh" (posix)。 你可以在 <.vimrc> 里设置下列三个变量中的一个,以指定全局的缺省值: ksh: let g:is_kornshell = 1 posix: (和设置 is_kornshell 为 1 效果相同) let g:is_posix = 1 bash: let g:is_bash = 1 sh: (缺省) Bourne shell let g:is_sh = 1 如果没有 "#! ..." 一行,而用户也没有用上述方法设定缺省的 sh.vim 语法设置,那么 syntax/sh.vim 假定使用 Bourne shell 语法。请不要在错误报告里引用 RFC 或者市场 占有率的统计数据 (译者注: 此处大概指希望使用其它缺省值的用户) -- 在 <.vimrc> 文件里自己选择系统使用的缺省 sh 版本就可以了。 syntax/sh.vim 文件提供若干级别的基于语法的折叠: let g:sh_fold_enabled= 0 (缺省,无语法高亮) let g:sh_fold_enabled= 1 (打开函数折叠) let g:sh_fold_enabled= 2 (打开 here 文档折叠) let g:sh_fold_enabled= 4 (打开 if/do/for 折叠) 那么若干语法项目 (Here 文档和函数体) 就可以进行语法折叠 (见 |:syn-fold|)。把这 些值加在一起可以得到多种项目的折叠: let g:sh_fold_enabled= 3 (打开函数和 here 文档的折叠) 如果你注意到往回滚动时,高亮出现问题,但 CTRL-L 重画又可以修正的话,尝试设置 "sh_minlines" 内部变量为较大的值: :let sh_minlines = 500 这使得语法同步在第一个显示行之前的 500 行开始。缺省值为 200。使用较大的值的缺 点是重画会变慢。 如果你没有要同步的东西,但显示又很慢,可以设置 "sh_maxlines" 内部变量来加速。 比如: let sh_maxlines = 100 缺省值是 sh_minlines 的两倍。设置为较小的值可以提高显示的速度。缺点是高亮错误 出现的可能性也较大。 SPEEDUP (AspenTech plant simulator) *spup.vim* *ft-spup-syntax* Speedup 语法文件有如下选项: - strict_subsections : 如果定义该变量,只有段 (section) 和子段 (subsection) 里 的关键字会作为 Statement 高亮,而其它关键字不会 (比如 OPERATION 段里的 WITHIN)。 - highlight_types : 该变量的定义使得流类型 (stream type),比如 temperature 或 pressure,用 Type 高亮,而不是普通的 Identifier。这里包括 DECLARE 段常见的类 型;如果定义了自己的类型,要在语法文件里自己加入。 - oneline_comments : 该值可选 1 到 3,它决定了 # 风格的注释的高亮方式。 oneline_comments = 1 : 允许偶数个 # 之后的正常 Speedup 代码。 oneline_comments = 2 : 第二个 # 开始的代码显示为出错。这是缺省设置。 oneline_comments = 3 : 如果某行包含超过一个 #,把整行显示为出错。 特别因为 OPERATION 段因为 PRESET (预设) 的变量而可能会很大,同步的正确设置很重 要。如果你的机器足够快,你可以在语法文件的末尾增加 minlines 和/或 maxlines 的 值。 SQL *sql.vim* *ft-sql-syntax* *sqlinformix.vim* *ft-sqlinformix-syntax* *sqlanywhere.vim* *ft-sqlanywhere-syntax* 尽管有 ANSI 的 SQL 标准,多数数据库引擎都增加了自己的扩展。Vim 目前支持 Oracle 和 Informix 的 SQL 方言。Vim 缺省假设 "*.sql" 文件使用 Oracle SQL。 Vim 目前通过不同语法脚本提供不同供应商的 SQL 支持。你可以把 Vim 的缺省设置从 Oracle 改为任何目前支持的 SQL 类型。你也可以方便地为每个缓冲区设置不同的 SQL 方言。 详细的操作可见 |ft_sql.txt|。 TCSH *tcsh.vim* *ft-tcsh-syntax* 这里讨论名为 "tcsh" 的外壳。这是 csh 的超集。关于如何检测文件类型,见 |csh.vim|。 Tcsh 不允许字符串里的 \",除非设置了 "backslash_quote" 外壳变量。如果你希望 VIM 认定不应该存在反斜杠 + 引号的构造,在 .vimrc 里加入这行: :let tcsh_backslash_quote = 0 如果你注意到往回滚动时,高亮出现问题,但 CTRL-L 重画又可以修正的话,尝试设置 "tcsh_minlines" 内部变量为较大的值: :let tcsh_minlines = 100 这使得语法同步在第一个显示行之前的 100 行开始。缺省值为 15。使用较大的值的缺点 是重画会变慢。 TEX *tex.vim* *ft-tex-syntax* *tex-folding* 要语法折叠么? <syntax/tex.vim> 的版本 28 支持基于语法的 part、chapter、section、subsection 等等的折叠。把 let g:tex_fold_enabled=1 放到你的 <.vimrc> 里,并 :set fdm=syntax。我建议把后者放到你的 LaTeX 文件末尾 的模式行里来执行: % vim: fdm=syntax *tex-nospell* 不想检查注释里的拼写? 有些家伙喜欢在注释里写源代码,所以希望在 LaTeX 文件的注释里关闭拼写检查。为 此,在 <.vimrc> 里放上: let g:tex_comment_nospell= 1 *tex-runon* 在注释还是数学模式里? <syntax/tex.vim> 高亮支持 TeX、LaTeX 和部分的 AmsTeX。高亮支持包括三个主要的区 域: normal、texZone 和 texMathZone。尽管付出了相当的努力使得这些区域能正确地 终止,$..$ 和$$..$$ 定界的区域无法同步,因为开始和结束模式无法区别。因而,提供 了一个特殊的 "TeX 注释" %stopzone 它会使得 texZone 或 texMathZone 强迫终止。 *