Очень старый вопрос, я знаю, но я только что достиг этого, используя "чистый emacs". Короче говоря, решение выглядит следующим образом:
Выполнить M-x query-replace-regexp
. При появлении запроса введите
/\*\(\(.\|^J\)*?\)*\*/
в качестве регулярного выражения для поиска. ^J
- это новая строка, которую вы можете ввести, нажав ^Q
(Ctrl + Q на большинстве клавиатур), а затем нажмите клавишу ввода. Затем введите
//\,(replace-regexp-in-string "[\n]\\([ ]*?\\) \\([^ ]\\)" "\n\\1// \\2" \1))
в качестве выражения замены.
По сути, идея заключается в том, что вы используете два вложенных поиска регулярных выражений. Основной просто находит комментарии в стиле C (очень быстрое повторение *?
очень удобно для этого). Затем выражение elisp используется для выполнения второй замены только внутри текста комментария . В этом случае я ищу новые строки с пробелом и замену последних трех пробелов на //
, что хорошо для сохранения форматирования комментариев (работает только до тех пор, пока все комментарии имеют отступ).
Изменения во вторичном регулярном выражении приведут к тому, что этот подход будет работать в других случаях, например
//\,(replace-regexp-in-string "[\n]" " " \1))
просто поместит все содержимое исходного комментария в один комментарий в стиле C ++.