Причина, по которой он имеет отступ, заключается в том, что (по умолчанию) многострочные комментарии выровнены с началом комментария в предыдущей строке. В этом случае начало содержащего комментария находится в столбце 47.
Теперь, как это исправить. Вот как я понял, как это исправить, решение в конце.
Во-первых, есть руководство cc-mode , а именно раздел , настраивающий отступ . Полезный ключ - C-c C-s
, который сообщает вам, какой синтаксис используется для отступа. В данном случае это ((c 61))
- c
является важной частью на данный момент.
Чтобы настроить его в интерактивном режиме, вы можете набрать C-c C-o
(когда точка находится на линии, отступ которой вы хотите исправить). Вам будет предложено указать, какую запись синтаксиса вы хотите настроить (по умолчанию c
в данном случае b / c, это текущий синтаксис), а затем вам будет предложено изменить запись синтаксиса (по умолчанию c-lineup-C-comments
).
Теперь мы можем посмотреть на эту функцию, чтобы увидеть, как мы можем настроить ее для удовлетворения ваших потребностей. M-x find-function c-lineup-C-comments
.
Вот где это становится сложнее. Вы можете настроить способ, которым cc-mode обрабатывает отступ комментария, но похоже, что вы хотите, чтобы он делал (в данном случае), чтобы признать, что c-комментарию, в котором вы находитесь, сразу предшествует другой c-comment и , для которого comment - это тот, которому вы хотите выровнять отступ.
Как ты это делаешь? Самый простой способ, о котором я могу подумать, это посоветовать 'c-lineup-C-comments
распознать этот особый случай и изменить значение его первого аргумента на то, что вы хотите. Мое ограниченное тестирование показывает, что это работает для вашего примера:
(defadvice c-lineup-C-comments (before c-lineup-C-comments-handle-doxygen activate)
(let ((langelm (ad-get-arg 0)))
(save-excursion
(save-match-data
(goto-char (1+ (c-langelem-pos langelem)))
(if (progn
(beginning-of-line)
;; only when the langelm is of form (c . something)
;; and we're at a doxygen comment line
(and (eq 'c (car langelm))
(looking-at "^\\(\\s-*\\)/\\*+//\\*\\*$")))
;; set the goal position to what we want
(ad-set-arg 0 (cons 'c (match-end 1))))))))
Конечный результат этого совета должен состоять в том, что аргумент, переданный в c-lineup-C-comments
, должен быть преобразован из (c . 61)
в (c . 17)
(или что-то в этом роде), по сути, вводя в заблуждение подпрограмму, чтобы выровнять комментарий в начале строки, а не комментарий, который вы в настоящее время изменяете.