Emacs область комментариев в режиме C - PullRequest
7 голосов
/ 12 октября 2009

В 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)

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

Ответы [ 2 ]

7 голосов
/ 12 октября 2009

Начиная с 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 (настройте условие по своему вкусу).

3 голосов
/ 12 октября 2009

Самое близкое, что я могу найти со встроенной поддержкой комментирования, это если вы установите comment-style в multi-line, что приведет к:

/* This is a comment which extends
 * over more than one line in C. */

Если этого недостаточно, взгляните на newcomment.el и определите свои собственные функции комментирования в зависимости от ситуации.

...