Заставить fill-абзац в строке документации python оставить тройные кавычки на отдельной строке

16

Я набираю строку документации Python все в одну строку, как это:

"""
This is a long docstring. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus. Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec consectetur ante hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non tortor. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed, adipiscing id dolor. Pellentesque auctor nisi id magna consequat sagittis.
"""

а затем я нажимаю Mq ( fill-paragraph), и я получаю это:

"""This is a long docstring. Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Donec a diam lectus. Sed sit amet ipsum
mauris. Maecenas congue ligula ac quam viverra nec consectetur ante
hendrerit. Donec et mollis dolor. Praesent et diam eget libero egestas
mattis sit amet vitae augue. Nam tincidunt congue enim, ut porta lorem
lacinia consectetur. Donec ut libero sed arcu vehicula ultricies a non
tortor. Lorem ipsum dolor sit amet, consectetur adipiscing
elit. Aenean ut gravida lorem. Ut turpis felis, pulvinar a semper sed,
adipiscing id dolor. Pellentesque auctor nisi id magna consequat
sagittis.

"""

У меня есть две проблемы с этим:

  1. Строка документа начинается с той же строки, что и """- я бы предпочел, чтобы тройная кавычка оставалась на отдельной строке.
  2. (Гораздо ниже приоритет.) Строка документации заканчивается пустой строкой.

Приведенный выше пример надуманный, но я часто сталкиваюсь с этим, особенно когда редактирую существующие строки документов, где я хотел бы просто M-qперефразировать весь пункт.

bstpierre
источник

Ответы:

15

Настройте python-fill-docstring-styleсоответственно, предполагая, что вы используете встроенный режим Python в Emacs 24.4. По умолчанию pep-257используется стиль, который ведет к наблюдаемому вами стилю, т.е. нет новой строки в начале и двух новых строк до конца строки документа.

Измените эту переменную на symmetricили, djangoчтобы режим Python соответствовал вашему предпочтительному стилю, то есть новой строке в начале строки документа и новой строке до конца:

(setq python-fill-docstring-style 'django)

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

symmetricи djangoразные по одной строке документации. Первый помещает тройные кавычки в одну и ту же строку, если строка документа помещается на одной строке, тогда как последний помещает тройные кавычки в отдельные строки в этом случае.

Взгляните на строку документации,python-fill-docstring-style чтобы увидеть все доступные варианты.

lunaryorn
источник
-1

По пустой строке в конце она выглядит как простая ошибка, пожалуйста, сообщите об этом M-x report-emacs-bug. Но что касается первого элемента, я не уверен, является ли это ошибкой или функцией, поэтому вы можете упомянуть об этом в своем отчете об ошибке, но, возможно, ответ будет таким: он просто следует соглашению "PEP-NNN".

Тем не менее, вы можете решить первую проблему следующим образом:

(add-hook 'python-mode-hook
          (lambda ()
            (set (make-local-variable 'paragraph-separate)
                 (concat paragraph-separate "\\|^[ \t]*\"\"\"[ \t]*$"))))
Стефан
источник
1
Это не ошибка, и вам не нужно ничего менять paragraph-separate. Стиль строки документа python.elнастраивается.
lunaryorn
Ничего себе, я бы никогда не догадался, что дополнительная пустая строка в конце строки документации может быть чем-то обязательным для стандарта.
Стефан
1
Стандарт (PEP 257) на самом деле не обеспечивает это, это всего лишь (общая) интерпретация этого. Emacs также поддерживает вариант без завершающей строки, как pep-257-nnв python-fill-docstring-style.
lunaryorn
1
По иронии судьбы, причина пустой ссылки такова: если вся строка документа не помещается на строке, поместите закрывающие кавычки в строку самостоятельно. Таким образом, команда Emacs 'fill-абзац' может быть использована для него.
Фелипе