Область комментариев Emacs в режиме C
Вопрос
Есть ли в GNU Emacs хороший способ изменить команду comment-region в режиме C с
/* This is a comment which extends */
/* over more than one line in C. */
к
/* This is a comment which extends
over more than one line in C. */
?я пытался
(setq comment-multi-line t)
но это не помогает.Eсть раздел о многострочных комментариях в руководстве Emacs, но там ничего не упоминается.
Решение
Начиная с Emacs 21, существует модуль с именем 'newcomment
, который имеет разные стили комментариев (см. переменную 'comment-styles
.Этот параметр приближается к тому, что вы хотите:
(setq comment-style 'multi-line)
(Примечание:вам, вероятно, следует сделать эту настройку в 'c-mode-hook
).
Однако ни одна из настроек не делает комментарии такими, какими вы хотите.
Самый простой способ получить то, что вы хотите, это добавить этот хак:
(defadvice comment-region-internal (before comment-region-internal-hack-ccs activate)
"override 4th argument to be just spaces"
(when (eq major-mode 'c-mode) ; some condition here
(let ((arg (ad-get-arg 4)))
(when arg
(ad-set-arg 4 (make-string (length arg) ?\ ))))))
Текущие настройки для comment-style
всегда добавляйте к строкам комментариев префикс «*» (если не весь «/*»).
Если у вас нет Emacs 21, я полагаю, вы можете просто скачать newcomment.el
из репозитория.Я не знаю, работает ли это как есть в более ранних версиях Emacs, но, возможно, стоит попробовать, хотя обновление Emacs было бы лучшим решением.
Мой взлом ломает 'uncomment-region
.Правильным решением было бы изменить 'comment-padright
.Это потребует немного больше исследований, чтобы не сломать другие вещи.Приведенный выше хак меняет поведение только в 'c-mode
(регулируйте состояние по своему вкусу).
Другие советы
Самое близкое, что я смог найти со встроенной поддержкой комментариев, это если вы установите comment-style
к multi-line
, который произведет это:
/* This is a comment which extends
* over more than one line in C. */
Если это недостаточно близко, взгляните на newcomment.el
и при необходимости определите свои собственные функции комментирования.