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

Vim Syntax Highlighting: highlight `self` python keyword with regex

我正在尝试为 vim 中的 python 自定义语法突出显示。我想突出显示关键字 self,但仅当其后跟 . 时才突出显示。这是我想出的代码:

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

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

有什么想法吗?

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

对于vim正则表达式看一下this answer, and, if you need more help, check this page

您需要使用 环视:

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

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

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

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

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

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

基于@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,而是使用pythonStatement突出显示self(个人偏好)。您可以使用其他突出显示组(运行 :syn 打开 python 文件以查看可用的内容)