1

我想扩展文件类型语法并突出显示现有文件类型。我的新文件语法的基本结构如下:

" Some local (new) syntax that I want to match
syn match   upfOperator "[&|~><!)(*#%@+/=?:;}{,.\^\-\[\]]"
syn match   upfDefines  "\$\S\+"
syn match   upfDefines  "\${\S\+}"
syn match   upfParens   "[)(}{\[\]]"

" load syntax that I want to extend.  This contains it's own highlight commands
runtime syntax/dtcl.vim

" New highlight statements
hi link upfOperator          Statement
hi link upfDefines           Constant
hi link upfParens            Constant

问题是 dtcl.vim 文件中包含的所有语法都没有突出显示。我能够打开一个 dctl 文件并且突出显示工作。但是,当我打开其他文件类型 (*.upf) 时,会加载 upf.vim,但不会加载 dtcl.vim。

dctl.vim 没有任何会导致文件无法加载的“if syntax defined”类型的命令。

4

1 回答 1

2

如果dctl.vim是正确的 Vim 语法脚本,它会清除任何现有的语法项 ( :syntax clear),因为所有语法都应该如此。因此,您必须将自己的upf...定义移到:runtime.

要正确加载现有语法,您应该使用以下命令:

runtime! syntax/dctl.vim syntax/dctl/*.vim

:runtime syntax/dctl.vim只考虑第一次出现而不考虑语法扩展。

除此之外,我认为您的方法没有问题,只要您只添加一些尚未涵盖的新语法元素(如果是,您可能需要containedin=...在您的方法中使用)。您可以使用该:syn list命令检查实际定义的内容。

于 2013-02-26T09:00:17.757 回答