在vim中的Python注释块内匹配太长的行

时间:2017-06-23 08:32:49

标签: vim vim-syntax-highlighting

我需要突出显示太长的Python文档字符串行的额外字符

尝试使用此代码:

syn region PythonDocString  start=+^\s*[uU]\?[rR]\?"""+ end=+"""+ keepend excludenl
syn match TooLongDocString /\%80v.*/ containedin=PythonDocString
hi TooLongDocString guifg=Red

但它也匹配文档字符串之外的行,并关闭默认的Python注释突出显示。如何使它工作?

更新

enter image description hereenter image description here

更新2

突然间,对于没有任何"""形式评论的文件,我得到了:

enter image description here

该行:

        sha = subprocess.check_output(['git', 'rev-parse', 'HEAD'], cwd=cwd).decode('ascii').strip()

当前代码:

au BufNewFile,BufRead *.py syn region pythonDocString  start=+^\s*[uU]\?[rR]\?"""+ end=+"""+ keepend excludenl contains=pythonEscape,@Spell,pythonDoctest,pythonDocTest2,pythonSpaceError,pythonDocstringTooLong
au BufNewFile,BufRead *.py syn match pythonDocStringTooLong /\%81v.*/ contained
au BufNewFile,BufRead *.py hi def link pythonDocString pythonString
au BufNewFile,BufRead *.py hi def link pythonDocStringTooLong Error

1 个答案:

答案 0 :(得分:2)

containedin=...将当前语法元素添加到引用的列表中,但确实暗示contained 。如果TooLongDocString上没有该属性(BTW也应该具有python...前缀以保持一致性),那么该元素将匹配任何地方

在任何情况下,由于您可以控制这两个定义,因此您只需在contains=pythonDocstringTooLong上使用pythonDocstring即可。我还认为应该包含其他(默认)语法元素:

syn region pythonDocString  start=+^\s*[uU]\?[rR]\?"""+ end=+"""+ keepend excludenl contains=pythonEscape,@Spell,pythonDoctest,pythonDocTest2,pythonSpaceError,pythonDocstringTooLong
syn match pythonDocStringTooLong /\%80v.*/ contained
当您无法修改引用的语法元素定义时,通常会使用

containedin=

最后,我将链接到现有的突出显示组,而不是定义(仅限GUI)突出显示:

hi def link pythonDocStringTooLong Error