2013-03-19 43 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

比整个事情结合到一些闲置的定时器,会做缩小/切换。

保持一些表达式,其切换第一模式并扩大。