Получение Emacs fill-paragraph, чтобы играть хорошо с комментариями, подобными javadoc
Я пишу основной режим Emacs для диалекта APL, который я использую на работе. Я получил
базовая блокировка шрифтов для работы, а также после установки комментариев и запуска
comment-start-skip, comment/uncomment region и fill paragraph также
работа.
Однако блоки комментариев часто содержат комментарии стиля javadoc и i
хотел бы заполнить абзац, чтобы избежать склеивания строк, начинающихся
с такими командами.
Если у меня это (\ вместо javadoc @):
# This is a comment that is long and should be wrapped.
# \arg Description of argument
# \ret Description of return value
M-q дает мне:
# 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
Я пробовал настроить абзац-начало и абзац-раздел
соответствующие значения, но абзац-абзац все еще не работает внутри
блок комментариев. Если я удалю маркеры комментариев, M-q работает так, как я хочу
to, поэтому регулярное выражение, которое я использую для запуска параграфа, похоже, работает.
Должен ли я написать специальный абзац заполнения для моего основного
Режим? cc-mode имеет тот, который обрабатывает такие случаи, но это действительно
комплекс, я хотел бы избежать его, если это возможно.
Ответы
Ответ 1
Проблема заключалась в том, что регулярное выражение в начале абзаца должно соответствовать всей строке для работы, включая фактический символ комментария. Следующий пример работает для примера, который я дал:
(setq paragraph-start "^\\s-*\\#\\s-*\\\\\\(arg\\|ret\\).*$")
Вот страница, которая имеет пример regexp для php-mode, который делает это:
http://barelyenough.org/blog/2006/10/nicer-phpdoc-comments/
Ответ 2
Существуют и другие режимы, которые имеют менее сложные функции, используемые для fill-paragraph-function
. Просмотр через мою установку, это похоже на то, что в ada-mode и make-mode - хорошие примеры.
Ответ 3
В этих случаях я открываю пустую строку между строками абзаца и строками аргументов, затем использую M-q для обертывания строк абзаца, а затем удаляю пустую строку между ними. Не идеально, но он работает и достаточно легко записать в макрос, если вам нужно его повторить.