我想扩展文件类型语法并突出显示现有文件类型。我的新文件语法的基本结构如下:
" 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”类型命令会导致文件无法加载。
答案 0 :(得分:2)
如果 dctl.vim 是一个正确的Vim语法脚本,它会清除所有现有语法项(:syntax clear
),因为所有语法都应该是。因此,您必须在upf...
下面移动自己的:runtime
定义。
要正确加载现有语法,您应该使用以下命令:
runtime! syntax/dctl.vim syntax/dctl/*.vim
您的:runtime syntax/dctl.vim
仅考虑第一次出现而没有语法扩展。
除此之外,我发现你的方法没有问题,只要你只添加一些尚未涵盖的新语法元素(如果是,你可能需要在你的containedin=...
中使用)。您可以使用:syn list
命令检查实际定义的内容。