仅针对*某些*文件扩展 vim 的语法高亮显示?

仅针对*某些*文件扩展 vim 的语法高亮显示?

我们的软件有许多 .xml 配置文件。Vim 会为这些文件着色,例如使用/usr/share/vim/vim74/syntax/xml.vim。但是我们可以自定义颜色吗?只是这些文件,而不是全部.xml 文件?

<schmoo>(这种定制的一个例子是给和标签之间的文本着色</schmoo>。但这个问题不是关于如何色彩,也与 XML 无关。我希望得到一个同样适用于 Python 或 YAML 或数百种其他格式的答案。

.xml 文件目录中的另一个文件可以覆盖或扩展吗syntax/xml.vim?(不太可能: 运行时路径没有提到当前目录;也没有提到autochdirgetcwd()似乎没有帮助。)

那么环境变量中的内容,或者 .xml 文件本身的内容(在顶部或底部;或者像 jsbegin/jsend 一样内联)呢?Vim自定义语法高亮,包含指定范围内的其他语言语法)?

或者必须将扩展放入每个用户的~/.vim/after/syntax/xml.vim(用于全部.xml 文件)?这不是最理想的,但对于足够专业以至于不会与其他内容 (如上面的“schmoo”) 发生冲突的扩展来说,是可以容忍的。

有关的:如何在 vim 中为自定义语言配置语法高亮?

参考:http://vimdoc.sourceforge.net/htmldoc/syntax.html#:syn-files

答案1

确保 vimmodeline已打开。 :set modeline?应该响应modeline而不是nomodeline。如有必要,请在 vimrc 中设置它。(安全问题现在已经过时了。)

在特定的 .xml 文件中,包含以下行:(// vim: filetype=xmlWithSchmoos如果不是 xml,则//用该语言中以注释开头的内容替换。)

创建~/.vim/syntax/xmlWithSchmoos.vim/usr/share/vim/vim74/syntax/xmlWithSchmoos.vim,包含单行:so $VIMRUNTIME/syntax/xml.vim

将节附加到xmlWithSchmoos.vim。例如,对于红色schmoo标签及其之间的内容,附加:

:syntax region xyzzy start=/<schmoo>/ end=/<\/schmoo>/
:highlight xyzzy ctermfg=red guifg=red

当然,将占位符schmooxmlxmlWithSchmoos和重命名为有意义的名称xyzzy

相关内容