我需要突出显示太长的Python文档字符串行的额外字符
尝试使用此代码:
syn region PythonDocString start=+^\s*[uU]\?[rR]\?"""+ end=+"""+ keepend excludenl
syn match TooLongDocString /\%80v.*/ containedin=PythonDocString
hi TooLongDocString guifg=Red
但它也匹配文档字符串之外的行,并关闭默认的Python注释突出显示。如何使它工作?
更新
更新2
突然间,对于没有任何"""
形式评论的文件,我得到了:
该行:
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
答案 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