让Emacs使用rst模式编辑Python文档字符串

让Emacs使用rst模式编辑Python文档字符串,python,emacs,restructuredtext,Python,Emacs,Restructuredtext,如何让Emacs在Python文件的docstring内部使用rst模式?我模模糊糊地记得,在一个文件的某些区域内,不同的模式是可能的,但我不记得是如何做到的 支持mmm模式的Emacs包。确保已安装,然后作为Emacs启动的一部分编写如下代码: (require 'mmm-mode) (setq mmm-global-mode 'maybe) (mmm-add-classes '((python-rst :submode rst-mode :front "^ *[ru]?\"

如何让Emacs在Python文件的docstring内部使用
rst模式
?我模模糊糊地记得,在一个文件的某些区域内,不同的模式是可能的,但我不记得是如何做到的

支持mmm模式的Emacs包。确保已安装,然后作为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模式定义一次匹配一行


编辑:我的原始版本将在单行docstring点将Emacs置于rst模式,然后将其保持在该模式,直到下一个docstring开始。如果docstring的开头在同一行上有另一个双引号,则此版本可避免将Emacs置于rst模式,该双引号仍然不完美,但应该更接近。您将找到另一个设置,检查docstring是否为语句本身。这样可以避免在其他区域出现rst


就编辑目的而言,缩小到docstring并激活rst模式应该是一种方法

python模式el提供py--docstring-p,这可能很容易适用于python.el

而不是将整个事情绑定到某个空闲计时器上,这样可以实现缩小/切换


保留一些用于关闭rst模式并加宽的表达式。

您需要将
包含返回设置为
t
。否则,
python模式
认为实际代码在docstring中。这是可行的,但有时docstring分隔符似乎“泄漏”到
python模式
,导致它将docstring之间的代码解释为docstring。例如,整个块呈现为docstring。设置面有多困难,以便在此上下文中使用与常规
rst模式
不同的一组
rst模式
面?哦,关于包含背面的观点很好。我将编辑这个问题的答案。我目前正在使用Emacs 23对上面的代码进行Debian测试(在编辑以修复开始模式之后,使用
include back
foix),ode.py示例对我来说是正确的,包括在您指定的区域。这是mmm模式0.4.8-7的情况。这两个版本对您来说是否不同?不幸的是,考虑到mmm模式的工作方式,我认为rst模式没有意识到它的运行方式有任何不同,因此我不知道如何设置不同的面。但是,mmm模式支持。