Как заставить Emacs заполнить абзац, чтобы он хорошо сочетался с комментариями, подобными javadoc

StackOverflow https://stackoverflow.com/questions/71788

  •  09-06-2019
  •  | 
  •  

Вопрос

Я пишу основной режим Emacs для диалекта APL, который я использую на работе.Я получил базовую блокировку шрифта для работы, и после настройки comment-start и comment-start-skip, область комментариев / раскомментирования и заполнение абзаца также работают.

Однако блоки комментариев часто содержат комментарии в стиле javadoc, и я хотел бы, чтобы fill-paragraph не склеивал строки, начинающиеся с таких команд.

Если у меня есть это (\ вместо javadoc @):

# This is a comment that is long and should be wrapped.
# \arg Description of argument
# \ret Description of return value

М-кью дает мне:

# This is a comment that is long and
# should be wrapped. \arg Description
# of argument \ret Description of
# return value

Но я хочу:

# This is a comment that is long and
# should be wrapped.
# \arg Description of argument
# \ret Description of return value

Я попытался настроить paragraph-start и paragraph-separate на соответствующие значения, но fill-paragraph по-прежнему не работает внутри блока комментариев .Если я удалю маркеры комментариев, M-q будет работать так, как я хочу , поэтому регулярное выражение, которое я использую для начала абзаца, похоже, работает.

Должен ли я писать пользовательский заполняющий абзац для моего основного режима ?в cc-mode есть один, который обрабатывает подобные случаи, но он действительно сложный, я бы хотел избежать этого, если это возможно.

Это было полезно?

Решение

Проблема заключалась в том, что регулярное выражение, начинающее абзац, должно соответствовать всей строке, чтобы работать, включая фактический символ комментария.Следующий elisp работает для примера, который я привел:

(setq paragraph-start "^\\s-*\\#\\s-*\\\\\\(arg\\|ret\\).*$")

Вот страница, на которой есть пример регулярного выражения для php-режима, который делает это:http://barelyenough.org/blog/2006/10/nicer-phpdoc-comments/

Другие советы

Существуют и другие режимы, которые имеют менее сложные функции, используемые для fill-paragraph-function.Просматривая мою установку, похоже, что те, что находятся в ada-mode и make-mode, являются хорошими примерами.

Что я делаю в этих случаях, так это открываю пустую строку между строками абзаца и строками аргумента, затем использую M-q для переноса строк абзаца, затем убираю пустую строку между ними.Не идеально, но это работает, и его достаточно легко записать в макрос, если вам нужно его повторить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top