我试图在vim中自定义python的语法高亮。我想突出显示关键字self
,但只有当它后面跟着一个.
。这是我提出的代码:
syn match pythonBoolean "\(\Wself\)\%(\.\)"
不幸的是,虽然我使用非捕获组.
,但\%(\.\)
也被突出显示。
任何的想法?
您需要使用环视:
:syn match pythonBoolean "\(\W\|^\)\zsself\ze\."
要么
:syn match pythonBoolean "\(\W\|^\)\@<=self\(\.\)\@="
使用lookbehinds and lookaheads怎么样?在任何非单词字符[^a-zA-Z0-9_]
之前出现的有效正则表达式,以及在常见的正则表达式语法中跟随.
的有效正则表达式为:(?<=\W)(self)(?=\.)
对于vim正则表达式,请查看this answer,如果您需要更多帮助,请查看this page。
在@ Meninx的答案的基础上,我将此添加到我的.vimrc
:
augroup PythonCustomization
" highlight python self, when followed by a comma, a period or a parenth
:autocmd FileType python syn match pythonStatement "\(\W\|^\)\@<=self\([\.,)]\)\@="
augroup END
注1:除了op所要求的内容之外,当self
后面跟着逗号或右括号时,它也会突出显示。
注2:这不是使用pythonBoolean
,而是使用self
(个人偏好)突出显示pythonStatement
。您可以使用其他突出显示组(运行:syn
并打开python文件以查看可用的内容)
作为lookbehind和lookahead的替代方案,这往往会减慢vim的速度:
syn match pythonBoolean "\<self\ze\."
或者,如果您想要突出显示所有对象:
syn match pythonBoolean "\<\w\+\ze\."