在 Python 文档字符串中嵌入 reStructuredText

2024-01-13

我希望在我的 Python 文档字符串中看到一些不错的语法突出显示和着色,它们(当然)是有效的 RESt。例如:

'''
A section
=========

an example::

    some code
'''
rest of python code

我最接近的是我的.vim/after/syntax/python.vim:

syn include syntax/rst.vim 
syn region pythonDocstring  start=+^\s*'''+ end=+'''+ contained

根据语法包含的文档 http://vimdoc.sourceforge.net/htmldoc/syntax.html#:syn-include这应该足够了。另请注意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')
[...]

最后我不能用!runtime因为rst.vim如果b:current_syntax变量已经定义:

if exists("b:current_syntax")
  finish
endif

尽管我付出了努力,我的文档字符串仍然与其他注释保持相同的颜色,没有语法突出显示。

我也尝试过这个:

syn region pythonDocstring  start=+^\s*'''+ end=+'''+ contains=CONTAINED

但我只设法将块的颜色更改为Special而不是Comment.

也许我应该定义 pythonDocstring 不具有任何默认颜色?

进一步注意:如果我删除 python.vim 中对 python 原始字符串的引用,着色就会消失,但我只会突出显示 python 关键字。


Update

使用我的 after/syntax/python.vim 文件尝试以下解决方案之一:

syn include @pythonRst syntax/rst.vim 
syn region pythonDocstring  start=+^\s*'''+ end=+'''+ contains=@pythonRst

导致使用以下命令打开文件时,RESt 文件呈灰色显示:.py扩大:

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

请注意,我已经尝试过有和没有colorscheme在我的 .vimrc 中


由于仅应应用 reST 语法insidePython 文档字符串,您必须将它们包含到语法簇中(此处:@pythonRst)。否则,Vim 会尝试到处匹配它们。

syn include @pythonRst syntax/rst.vim

然后,定义一个覆盖这些文档字符串的区域,并明确指示 Vim 突出显示其中的 reST 语法(通过contains=)

syn region pythonDocstring  start=+^\s*'''+ end=+'''+ contains=@pythonRst
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Python 文档字符串中嵌入 reStructuredText 的相关文章