Подтвердить что ты не робот

Имейте Emacs редактировать докстроны Python, используя rst-mode

Как заставить Emacs использовать rst-mode внутри docstrings в файлах Python? Я смутно помню, что возможны разные режимы в определенных областях файла, но я не помню, как это было сделано.

4b9b3361

Ответ 1

Пакет 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, а затем оставьте ее в этом режиме до начала следующей docstring. Эта версия позволяет исключить Emacs в первый режим, если есть еще одна двойная кавычка в той же строке, что и начало docstring, которое все еще не идеально, но должно быть ближе.

Ответ 2

Вы найдете еще одну настройку, которая проверяет, что docstring является самой инструкцией. Это позволит избежать первого в другом heredoc.

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

Ответ 3

Что касается целей редактирования, то нужно сузить до docstring и активировать rst-режим.

python-mode el предоставляет py-docstring-p, который может быть легко адаптирован для python.el

Чем привязано все это к некоторому таймеру, будет сужение/переключение.

Остается некоторое выражение, которое переключает первый режим и расширяется.