如何设置优先于文件特定语法规则的全局语法规则?



我希望意外字符具有与通常不同的背景颜色。我在.vimrc中添加了以下高亮显示规则:

syntax match NotPrintableAscii "[^x20-x7F]"
hi NotPrintableAscii ctermbg=236

这个词对于某些文件很有用,但是对于任何具有特定于文件类型的语法规则的文件不起作用。

我应该在哪里设置这个以便它适用于所有文件类型?

这只在某些时候起作用的事实是由于以下两点:

  • 它只匹配尚未包含在另一个语法组中的顶层元素。添加containedin=ALL将其嵌入到任何地方。注意,这可能会破坏现有的语法。
  • ~/.vimrc中的定义太早;另一个语法脚本将覆盖您的语法脚本。将:autocmd Syntax *前置到:syntax命令,并将此放在~/.vimrc中的:syntax on 之后。

您需要两个条目,一个用于没有特定于文件类型的语法规则的文件(例如没有扩展名的文件),另一个用于有语法规则的文件(例如.py文件):

syntax on
" For files that don't have filetype-specific syntax rules
autocmd BufNewFile,BufRead *syntax match NotPrintableAscii "[^x20-x7F]"
" For files that do have filetype-specific syntax rules
autocmd Syntax * syntax match NotPrintableAscii "[^x20-x7F]" containedin=ALL
hi NotPrintableAscii ctermbg=236

最新更新