#c #emacs
#c #emacs
Вопрос:
Здесь «комментарии к заголовку» относятся к:
/* Program Name: Foo */
/* Author: Jane Doe */
/* Date: 06/29/2014 */
/* Rev: 1.0 */
Сложные части:
- Сложно выровнять окончание
*/
в каждой строке, если использовать M-; - Если возможно, я бы хотел выровнять содержимое после
:
каждой строки.
Заранее спасибо.
Ответ №1:
Вы можете сделать это с помощью двух вызовов align-regexp
, хотя это немного сложно ввести:
/* Program Name: Foo */
/* Author: Jane Doe */
/* Date: 06/29/2014 */
/* Rev: 1.0 */
Выберите область, которую вы хотите изменить, затем выполните первое align-regexp
действие с префиксным аргументом:
C-u M-x align-regexp RET :(s-*) RET RET RET n
В этой версии align-regexp
используется регулярное выражение, соответствующее символу двоеточия, за которым следует любое количество пробелов. Затем мы
- примите вариант изменения группы захвата по умолчанию 1 (пробел),
- тогда по умолчанию оставляется хотя бы один пробел при настройке,
- затем скажите Emacs, чтобы он не повторял для всей строки, так как нам не нужна эта функция.
Это должно оставить вас с
/* Program Name: Foo */
/* Author: Jane Doe */
/* Date: 06/29/2014 */
/* Rev: 1.0 */
Теперь, C-x C-x
чтобы поменять местами точку и пометку, повторно выделите свой текст и выполните другое align-regexp
. Для этого не нужен префиксный аргумент:
M-x align-regexp RET */ RET
Эта версия намного проще. Мы предоставляем регулярное выражение, которое соответствует индикатору закрытия комментария */
, исключая звездочку.
И вы должны сделать! Конечный результат выглядит так:
/* Program Name: Foo */
/* Author: Jane Doe */
/* Date: 06/29/2014 */
/* Rev: 1.0 */
Редактировать:
Вы должны быть в состоянии написать функцию для автоматизации этого процесса. Я не эксперт по elisp, но, похоже, это помогает:
(defun my-align-c-comment-block ()
(interactive)
(when (use-region-p)
(align-regexp (region-beginning) (region-end) ":\(\s-*\)")
(exchange-point-and-mark)
(align-regexp (region-beginning) (region-end) "\(\s-*\)\*/")))
Комментарии:
1. Код работает отлично. Скоро я перейду к части регулярных выражений.