Наведений нижче код добре працює з мого короткого тестування в c-modeбуфері:
- Після введення
/*, натисніть M-j, прив'язка за замовчуванням для indent-new-comment-line(та прив'язка за замовчуванням для c-indent-new-comment-lineв c-mode). Якщо це перший рядок коментаря, символи закриття, що закриваються, */будуть автоматично вставлені.
- Удари
M-jкілька разів з вставкою більш рядків коментаря з *префіксом. Це вбудована поведінка c-indent-new-comment-line/ indent-new-comment-lineфункцій. Перегляньте документацію з кількох рядків коментарів .
- Додатковий самородок у наведеному нижче коді гарантує, що принаймні один пробіл між
*кожним рядком коментаря та коментарем.
(defun my-prettify-c-block-comment (orig-fun &rest args)
(let* ((first-comment-line (looking-back "/\\*\\s-*.*"))
(star-col-num (when first-comment-line
(save-excursion
(re-search-backward "/\\*")
(1+ (current-column))))))
(apply orig-fun args)
(when first-comment-line
(save-excursion
(newline)
(dotimes (cnt star-col-num)
(insert " "))
(move-to-column star-col-num)
(insert "*/"))
(move-to-column star-col-num) ; comment this line if using bsd style
(insert "*") ; comment this line if using bsd style
))
;; Ensure one space between the asterisk and the comment
(when (not (looking-back " "))
(insert " ")))
(advice-add 'c-indent-new-comment-line :around #'my-prettify-c-block-comment)
;; (advice-remove 'c-indent-new-comment-line #'my-prettify-c-block-comment)
Наприклад, після оцінки наведеного вище коду, я отримую нижче на типізації: /* M-j First comment line M-j Second comment line. ▮ вказує розташування курсору в кінці введення тексту.
/*
* First comment line
* Second comment line▮
*/
Тестування блоку коментарів зміщення ..
За допомогою курсору після крапки з комою введіть: /* M-j Test offset commentнаведено нижче. ▮ вказує розташування курсору в кінці введення тексту.
#include<stdio.h>
main() {
printf("Hello World"); /*
* Test offset comment▮
*/
}