Vim语法突出显示:使用正则表达式突出显示`self` python关键字

问题描述 投票:3回答:4

我试图在vim中自定义python的语法高亮。我想突出显示关键字self,但只有当它后面跟着一个.。这是我提出的代码:

syn match   pythonBoolean     "\(\Wself\)\%(\.\)"

不幸的是,虽然我使用非捕获组.,但\%(\.\)也被突出显示。

任何的想法?

python regex vim vi macvim
4个回答
5
投票

您需要使用环视:

:syn match pythonBoolean "\(\W\|^\)\zsself\ze\." 

要么

:syn match pythonBoolean "\(\W\|^\)\@<=self\(\.\)\@="

1
投票

使用lookbehinds and lookaheads怎么样?在任何非单词字符[^a-zA-Z0-9_]之前出现的有效正则表达式,以及在常见的正则表达式语法中跟随.的有效正则表达式为:(?<=\W)(self)(?=\.)

对于vim正则表达式,请查看this answer,如果您需要更多帮助,请查看this page


1
投票

在@ 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文件以查看可用的内容)


0
投票

作为lookbehind和lookahead的替代方案,这往往会减慢vim的速度:

syn match pythonBoolean "\<self\ze\."

或者,如果您想要突出显示所有对象:

syn match pythonBoolean "\<\w\+\ze\."
© www.soinside.com 2019 - 2024. All rights reserved.