SYNTAX
*syntax.txt* For Vim version 7.0. 最近更新: 2006年5月
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| 特性,就不会有语法高亮的功能。
*: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|。
某个语言的语法和高亮命令通常存在一个语法文件里。命名惯例是: "{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、etc.
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
这里解释命令 ":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 自动命令。这可以用来为某项语法修
正高亮方式。
*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>,而用 " " 来显示连续的空格。
'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 *ada.vim* *ft-ada-syntax*
本模块为 1995 年版的 Ada ("Ada95") 设计,它支持面向对象编程,受保护的类型,等
等。它也能处理为原始 Ada 语言的代码 ("Ada83" 或 "Ada87"),不过 Ada83 代码里如
果使用 Ada95 才有的关键字的话,颜色显示会不正确 (不过这样的代码本来也应该修
正)。更多关于 Ada 的信息,见 http://www.adapower.com。
Ada 模式正确地处理一些情况。例如,它知道 "-5" 里的 "-" 是数字的一部分,但
"A-5" 里的该字符则是操作符。通常,引用别的编译单元的 "with" 或 "use" 语句使用
C 里面的 "#include" 相同的色彩。如果你为 "Conditional" 或 "Repeat" 组指定了不
同的色彩,那么 "end if" 和 "end loop" 会根据它们所在的组被分别标色。你可以用
vim 的 "highlight" 命令来给出不同的颜色 (例如,要改变循环的显示方式,输入命令
":hi Repeat",后面跟色彩的规格说明;在普通终端上,色彩规格 ctermfg=White 通常
就有不错的显示效果)。
本 Ada 模式可以设置若干选项。给选项赋值就可以打开。例如,要打开一个选项:
let ada_standard_types = 1
可用 ":unlet" 关闭。例如:
unlet ada_standard_types = 1
使用 ":" 并在命令行输入这些命令就可以在载入 Ada 文件时临时设置选项。要永久设
置,把 "let" 命令加到你的 "~/.vimrc" 文件里,无需冒号。
以下是 Ada 模式选项:
变量 动作
ada_standard_types 高亮 Standard 包里的类型 (例如,"Float")
ada_space_errors 高亮空格里的错误...
ada_no_trail_space_error 但忽略行尾的空格
ada_no_tab_space_error 但忽略空格之后的制表
ada_withuse_ordinary 把 "with" 和 "use" 显示为普通的关键字
(用于引用别的编译单元时,它们不再特殊高亮)。
ada_begin_preproc 使用 C 预处理命令的色彩来显示所有 begin 风格的关键
字。
即使在慢速 (90Mhz) PC 上,该模式也很快。但如果你还是觉得速度无法忍受,可以打开
ada_withuse_ordinary。
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_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 region myFold start="{" end="}" transparent fold
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 文件加入 Doxygen 的高亮,Java 应该也能用。
有几个办法可以打开 Doxygen 格式。首先,在文件的模式行上可以给 syntax 加入
".doxygen",进行显式设置。示例:
:set syntax=c.doxygen
或
// vim:syntax=c.doxygen
要让任何文件类型使用 Doxygen 格式,在 .vimrc 里为每个文件类型加上下行,其中
{filetype} 用相应的值替代。
:let g:syntax_extra_{filetype}='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="somfile.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=1
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
理想的话,该值应该足够大,使得最大的类或模块能够得到处理。
特殊标识符的高亮可以通过定义 "ruby_no_identifiers" 来关闭:
:let ruby_no_identifiers = 1
这会防止标识符 "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_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 文
档和注释的折叠。
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 版本就可以了。
如果你在 <.vimrc> 里设定
let g:sh_fold_enabled= 1
那么若干语法项目 (Here 文档和函数体) 就可以进行语法折叠 (见 |:syn-fold|)。
如果你注意到往回滚动时,高亮出现问题,但 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
方言.
详细的操作可见 |sql.txt|。
TCSH *tcsh.vim* *ft-tcsh-syntax*
这里讨论名为 "tcsh" 的外壳。这是 csh 的超集。关于如何检测文件类型,见
|csh.vim|。
Tcsh 不允许字符串里的 \",除非设置了 "backslash_quote" 外壳变量。如果你希望
VIM 认定不应该存在反斜杠 + 引号的构造,在 .vimrc 里加入这行:
:let tcsh_backslash_quote = 0
如果你注意到往回滚动时,高亮出现问题,但 CTRL-L 重画又可