2013-03-19 74 views

回答

13

支持的Emacs包是mmm-mode。確保已安裝,然後像這樣的代碼,您的Emacs啓動的一部分,應該這樣做:

(require 'mmm-mode) 
(setq mmm-global-mode 'maybe) 
(mmm-add-classes 
'((python-rst 
    :submode rst-mode 
    :front "^ *[ru]?\"\"\"[^\"]*$" 
    :back "^ *\"\"\"" 
    :include-front t 
    :include-back t 
    :end-not-begin t))) 
(mmm-add-mode-ext-class 'python-mode nil 'python-rst) 

我與一些Python程序測試此,它似乎正常工作。

請注意,對於每個三重引號字符串,這將切換到rst模式,而不僅僅是函數定義開始時的那些字符串。你可能可以將它限制在函數定義開始時的一個更復雜的前置正則表達式,但我不完全確定如何處理它,因爲我認爲默認情況下mmm模式定義一次匹配一條線。

編輯:我原來的版本會把Emacs的第一個進入模式,在單行文檔字符串的點,然後將它留在該模式下,直到下一個文檔字符串的開始。如果在同一行上有另一個雙引號作爲docstring的開始,這個版本可以避免將Emacs置於rst模式,這仍然不完美,但應該更接近。

+0

您需要將'include-back'設置爲't'。否則,'python-mode'認爲實際的代碼是在docstrings中。 – asmeurer 2013-03-19 17:26:49

+0

這可行,但有時候文檔字符串分隔符似乎「泄漏」到「python-mode」,導致它將文檔之間的代碼解釋爲文檔字符串。例如,[this](https://github.com/sympy/sympy/blob/master/sympy/solvers/ode.py#L2688-2759)整個塊被呈現爲文檔字符串。 – asmeurer 2013-03-19 18:09:34

+0

設置面的難度有多大,以便在此上下文中使用不同的「第一模式」面組而不是常規的第一模式面? – asmeurer 2013-03-19 18:18:21

0

至於對編輯而言,縮小到文檔字符串和激活第一個模式應該是要走的路。

蟒蛇模式EL提供PY - 文檔字符串-P,這可能很容易適應python.el

比整個事情結合到一些閒置的定時器,會做縮小/切換。

保持一些表達式,其切換第一模式並擴大。