13

如何让 Emacsrst-mode在 Python 文件的文档字符串中使用?我隐约记得在文件的某些区域内可以使用不同的模式,但我不记得它是如何完成的。

4

3 回答 3

16

支持它的 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 置于 rst 模式,然后将其保持在该模式直到下一个文档字符串的开始。如果在同一行与文档字符串的开头有另一个双引号,则此版本避免将 Emacs 置于 rst 模式,这仍然不完美,但应该更接近。

于 2013-03-19T07:31:12.140 回答
0

您会发现另一个设置来检查文档字符串本身是否是一个语句。这避免了在其他heredoc中拥有第一名。

https://github.com/jorgenschaefer/elpy/issues/498

于 2015-02-16T08:11:18.447 回答
0

就编辑目的而言,缩小到文档字符串并激活 rst-mode 应该是要走的路。

python-mode el 提供了 py--docstring-p,它可能很容易适应 python.el

比起将整个事情绑定到某个空闲计时器,会进行缩小/切换。

保留一些表达式,它关闭 rst 模式并扩大。

于 2015-02-16T12:16:26.097 回答