[英]Force Sphinx to interpret Markdown in Python docstrings instead of reStructuredText
[英]Embedding reStructuredText in Python docstrings
我想在我的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
根據語法包括的文檔,這應該足夠了。 另請注意, 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
因為如果已經定義了b:current_syntax
變量, rst.vim
不執行任何操作:
if exists("b:current_syntax")
finish
endif
盡管經過我的努力,我的文檔字符串仍然與其他注釋保持相同的顏色,並且沒有突出顯示語法。
我也試過這個:
syn region pythonDocstring start=+^\s*'''+ end=+'''+ contains=CONTAINED
但是我只設法將塊的顏色更改為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
當打開擴展名為.py
的文件時,導致RESt文件顯示為灰色:
同時使用.rst
打開相同的文件。 擴展似乎可以正常工作(只是為了表明我有一個rest語法文件):
請注意,我既沒有試圖colorscheme
在我的.vimrc
由於reST語法僅應在 Python文檔字符串中應用,因此您必須將它們包括在語法集群中(此處為@pythonRst
)。 否則,Vim會嘗試在任何地方匹配它們。
syn include @pythonRst syntax/rst.vim
然后,定義一個覆蓋這些文檔字符串的區域,並明確指示Vim在其中突出顯示reST語法(通過contains=
)
syn region pythonDocstring start=+^\s*'''+ end=+'''+ contains=@pythonRst
我終於設法破解了。
首先,我將rst.vim
文件從$ VIMRUNTIME / syntax復制到我的.vim/syntax/
文件夾中
其次,這是我的.vim/after/syntax/python.vim
文件(感謝@Ingo):
syn include @pythonRst syntax/rst.vim
syn region pythonDocstring start=+^\s*"""+ end=+"""+ contains=@pythonRst
第三,我編輯了文件並注釋掉了該塊,以忽略是否設置了當前語法:
if exists("b:current_syntax")
finish
endif
此代碼塊加載代碼塊(由於試圖加載python語法文件而導致了一些遞歸問題,該語法文件已加載以下語法文件:
for code in g:rst_syntax_code_list
unlet! b:current_syntax
[...]
unlet! prior_isk
endfor
最后,最后一個代碼塊:
let b:current_syntax = "rst"
這樣語法就可以保留為python。
結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.