【问题标题】:Vim Syntax Highlighting: highlight `self` python keyword with regexVim 语法高亮:使用正则表达式高亮 `self` python 关键字
【发布时间】:2016-11-07 06:25:22
【问题描述】:

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

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

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

有什么想法吗?

【问题讨论】:

  • 你试过\v开头激活很神奇
  • 我试过了,它并没有改变任何东西。据我了解,\v 允许避免转义括号等特殊字符。
  • 但是self在python中不是关键字。
  • @aragaer 你是对的,但无论是不是关键字都不会改变手头的问题。

标签: python regex vim vi macvim


【解决方案1】:

您需要使用lookaround

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

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

【讨论】:

  • 工作就像一个魅力!谢谢。
【解决方案2】:

使用lookbehinds and lookaheads怎么样?以任何非单词字符 [^a-zA-Z0-9_] 开头并后跟 . 的常见正则表达式语法中的 self 出现的有效正则表达式是:(?&lt;=\W)(self)(?=\.)

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

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      【解决方案4】:

      基于@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:除了操作要求的内容外,它还会在self 后跟逗号或右括号时突出显示。

      注意2:这里没有使用pythonBoolean,而是使用pythonStatement(个人偏好)突出显示self。您可以使用其他高亮组(运行:syn 并打开python 文件以查看可用的内容)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-16
        • 1970-01-01
        • 1970-01-01
        • 2014-10-07
        • 2014-11-14
        相关资源
        最近更新 更多