让Emacs使用rst-mode编辑Python文档字符串

asm*_*rer 12 python emacs restructuredtext

如何让Emacs rst-mode在Python文件中的文档字符串中使用?我依稀记得文件某些区域内的不同模式是可能的,但我不记得它是如何完成的.

rra*_*rra 14

支持它的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)
Run Code Online (Sandbox Code Playgroud)

我用一些Python程序测试了它,它似乎工作正常.

请注意,对于每个三引号字符串,这将切换到rst模式,而不仅仅是函数定义开头的字符串.您可以将它限制为功能定义开头的那些前端正则表达式,但我不完全确定如何处理它,因为我认为默认情况下mmm模式定义一次匹配一行.

编辑:我的原始版本会将Emacs置于单行文档字符串的第一模式,然后将其保留在该模式中直到下一个文档字符串的开头.如果在与文档字符串的开头相同的行上有另一个双引号,这个版本避免将Emacs置于第一模式,这仍然不完美但应该更接近.