语法突出显示的工作原理很简单:
在syntax/<filetype>.vim
语法中,使用:syntax
命令定义规则。这个命令定义了语法。它说:“如果文本匹配此正则表达式,则为字符串”,依此类推。为此,它分配了一个突出显示组。它并没有说的颜色这样东西。
:highlight
说“用这些颜色突出显示该组”。这是在配色方案中完成的,而不是语法文件。现在有很多默认的高亮组(String
,Function
,Special
,等等),所有的配色方案应该定义。
但是,您绝不限于这些默认组,并且可以根据需要创建任意数量的组(但默认语法文件通常不这样做)。
该indent/<filetype>.vim
文件控制自动缩进。例如,对于Ruby,它说“后一行def
应增加压痕级别”和“后一行end
应将压痕级别降低一级”。它对颜色或语法突出显示不起作用。
为什么不同的编程语言突出显示不同?部分原因是因为个人美学和撰写者的观点。例如,在Ruby中,Type
高亮组用于类名。但这也可能Function
是其他。为什么呢Type
?可能是因为作者认为它的配色方案看起来更好。
但更重要的是,这些语言具有不同的语义和敏感性。在Ruby中,self
是一个特殊的关键字。您不能self = "foo"
或def self()
。这些是错误。但这不是 Python中的情况。这只是一个没有任何特殊属性的变量。正在做:
x = Object()
x.foo()
被Python真正“翻译”为:
Object.foo(x)
名称self
仅是约定俗成的名称(几乎被普遍采用),但是您可以随意命名。def x(this):
或def x(xxx):
同等有效。您也可以在self
任何喜欢的地方使用该名称。self = 'foo'
并且def self():
非常好。
我认为self
不应突出显示它,因为它既不是特殊关键字,也不是预定义的变量(例如str
)。self
语法文件中没有该单词的痕迹,因此看起来它的作者也有相同的理由:-)
如果要self
突出显示,则必须为其创建语法规则:
:syn keyword pythonBuiltin self
该pythonBuiltin
组名已在默认语法文件中定义,并链接到Function
突出显示组。要使用新的突出显示组,请使用以下方法:
:syn keyword pythonSelf self
:highlight def link pythonSelf Special
要进行这些更改,您不能仅将它们粘贴在vimrc文件中。语法文件将覆盖它。相反,您需要在语法文件加载后运行它,可以通过两种方式执行:
使用FileType
autocmd:
augroup python
autocmd!
autocmd FileType python
\ syn keyword pythonSelf self
\ | highlight def link pythonSelf Special
augroup end
使用after-directory
,~/.vim/after/syntax/python.vim
:
syn keyword pythonSelf self
highlight def link pythonSelf Special
两种方法实际上是相同的。使用任何您喜欢的。