self
的状态如何?突出显示。 (这是在base16中进行的,但在其他配色方案中,其比较将是相似的)。通常,看起来对象语法高亮显示是错误的。我尝试过的一些事情:
查看vim加载的语法脚本;在下面的示例中,.py和.rb之间的唯一区别是,当然,ruby获取了indent / ruby.vim和语法/ruby.vim,而python获取了indent / python.vim和语法/python.vim。这些是homebrew vim随附的文件。
在macvim中加载相同的文件,而不是在终端(iterm2)vim中加载;同样的问题,文件看起来与图片完全相同。
添加新的python.vim文件。即使用作
.vim/after
脚本也不能解决问题。欢迎提出任何建议;我已经为此花了好几个小时的时间,无法弄清为什么突出显示无法按预期工作。
#1 楼
语法高亮显示的工作原理很简单:在
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
这两种方法实际上是相同的。使用任何您喜欢的。
评论
请注意,Python没有符号,我强烈建议您将Python 3语法用于新代码。