Вопрос

Есть ли в 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 и при необходимости определите свои собственные функции комментирования.

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