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

时间:2016-07-05 12:06:19

标签: python regex vim vi macvim

我正在尝试在vim中自定义python的语法高亮显示。我想突出显示关键字self,但仅限于后跟.。这是我提出的代码:

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

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

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

您需要使用环视

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

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

答案 1 :(得分:1)

如何使用lookbehinds and lookaheads?在常见的正则表达式语法中,任何非单词字符[^a-zA-Z0-9_].后面的自我出现的有效正则表达式为:(?<=\W)(self)(?=\.)

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

答案 2 :(得分: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。您可以使用其他突出显示组(在打开python文件的情况下运行:syn以查看可用的内容)

答案 3 :(得分:0)

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

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

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

syn match pythonBoolean "\<\w\+\ze\."