我们的软件有许多 .xml 配置文件。Vim 会为这些文件着色,例如使用/usr/share/vim/vim74/syntax/xml.vim
。但是我们可以自定义颜色吗?只是这些文件,而不是全部.xml 文件?
<schmoo>
(这种定制的一个例子是给和标签之间的文本着色</schmoo>
。但这个问题不是关于如何色彩,也与 XML 无关。我希望得到一个同样适用于 Python 或 YAML 或数百种其他格式的答案。
.xml 文件目录中的另一个文件可以覆盖或扩展吗syntax/xml.vim
?(不太可能: 运行时路径没有提到当前目录;也没有提到autochdir
或getcwd()
似乎没有帮助。)
那么环境变量中的内容,或者 .xml 文件本身的内容(在顶部或底部;或者像 jsbegin/jsend 一样内联)呢?Vim自定义语法高亮,包含指定范围内的其他语言语法)?
或者必须将扩展放入每个用户的~/.vim/after/syntax/xml.vim
(用于全部.xml 文件)?这不是最理想的,但对于足够专业以至于不会与其他内容 (如上面的“schmoo”) 发生冲突的扩展来说,是可以容忍的。
参考: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
当然,将占位符schmoo
、xml
、xmlWithSchmoos
和重命名为有意义的名称xyzzy
。