将vim文件语法扩展为另一种不起作用的文件类型

时间:2013-02-26 01:15:51

标签: vim vim-plugin

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

" 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”类型命令会导致文件无法加载。

1 个答案:

答案 0 :(得分:2)

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

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

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

您的:runtime syntax/dctl.vim仅考虑第一次出现而没有语法扩展。

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