在Python文档字符串中嵌入reStructuredText

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文件中的结果显示为灰色:

python语法

用a打开同一个文件时.rst.扩展似乎工作正常(只是为了表明我有一个休息语法文件):

休息语法

请注意,我colorscheme在.vimrc中尝试过和不使用

Ing*_*kat 3

由于 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)