我正在尝试在vim中自定义python的语法高亮显示。我想突出显示关键字self
,但仅限于后跟.
。这是我提出的代码:
syn match pythonBoolean "\(\Wself\)\%(\.\)"
不幸的是,虽然我使用非捕获组.
,但\%(\.\)
也会突出显示。
有什么想法吗?
答案 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\."