lor*_*zog 5 python vim restructuredtext python-sphinx
我想在我的Python文档字符串中看到一些很好的语法突出显示和着色,当然这些是有效的RESt.例如:
'''
A section
=========
an example::
some code
'''
rest of python code
Run Code Online (Sandbox Code Playgroud)
我最接近的是我的.vim/after/syntax/python.vim:
syn include syntax/rst.vim
syn region pythonDocstring start=+^\s*'''+ end=+'''+ contained
Run Code Online (Sandbox Code Playgroud)
根据语法包含的文档应该足够了.另请注意,rst.vim重新定义了一堆python实体,因此我必须注释掉与代码相关的所有部分:
" syn region rstCodeBlock contained matchgroup=rstDirective
" \ start=+\%(sourcecode\|code\%(-block\)\=\)::\_s*\n\ze\z(\s\+\)+
" \ skip=+^$+
" \ end=+^\z1\@!+
" \ contains=@NoSpell
" syn cluster rstDirectives add=rstCodeBlock
" if !exists('g:rst_syntax_code_list')
[...]
Run Code Online (Sandbox Code Playgroud)
最后,我无法使用,!runtime因为rst.vim如果b:current_syntax已定义变量则不执行任何操作:
if exists("b:current_syntax")
finish
endif
Run Code Online (Sandbox Code Playgroud)
尽管我的努力,我的文档字符串保持与其他注释相同的颜色,没有语法突出显示.
我也试过这个:
syn region pythonDocstring start=+^\s*'''+ end=+'''+ contains=CONTAINED
Run Code Online (Sandbox Code Playgroud)
但我只是设法改变块的颜色Special而不是Comment.
也许我应该定义pythonDocstring不要有任何默认着色?
进一步说明:如果我在python.vim中删除对python原始字符串的引用,着色消失但我只是突出显示了python关键字.
使用我的after/syntax/python.vim文件尝试以下解决方案之一:
syn include @pythonRst syntax/rst.vim
syn region pythonDocstring start=+^\s*'''+ end=+'''+ contains=@pythonRst
Run Code Online (Sandbox Code Playgroud)
打开带.py扩展名的文件时,RESt文件中的结果显示为灰色:
用a打开同一个文件时.rst.扩展似乎工作正常(只是为了表明我有一个休息语法文件):
请注意,我colorscheme在.vimrc中尝试过和不使用
由于 reST 语法只能应用于Python 文档字符串内部,因此您必须将它们包含到语法簇中(此处:)@pythonRst。否则,Vim 会尝试到处匹配它们。
syn include @pythonRst syntax/rst.vim
Run Code Online (Sandbox Code Playgroud)
然后,定义一个覆盖这些文档字符串的区域,并明确指示 Vim 突出显示其中的 reST 语法(通过contains=)
syn region pythonDocstring start=+^\s*'''+ end=+'''+ contains=@pythonRst
Run Code Online (Sandbox Code Playgroud)