Emacs c-mode заполнить абзац комментариями Doxygen
У меня есть вопрос, который очень похож на заставку Emacs, чтобы играть хорошо с комментариями, похожими на javadoc, но я не был уверен, получу ли я много ответов в годичной ветке.
Во всяком случае, у меня есть C-код с комментариями Doxygen, которые выглядят следующим образом:
/**
* Description
*
* @param[in,out] var1 : <Long description that needs to be wrapped.>
* @param[in,out] var2 : <Description2>
*/
Теперь, когда я использую Mq в emacs, я хочу следующее:
/**
* Description
*
* @param[in,out] var1 : <Long description that needs
* to be wrapped.>
* @param[in,out] var2 : <Description2>
*/
Но, тока я получаю следующее:
/**
* Description
*
* @param[in,out] var1 : <Long description that needs
* to be wrapped.> @param[in,out] var2 : <Description2>
*/
Проведя некоторое исследование, я понял, что мне нужно было установить переменную параграфа в emacs для распознавания "@param". Я обнаружил еще один вопрос о переполнении стека (как заставить Emacs заполнять абзац хорошо работать с javadoc-подобными комментариями), который имел пример регулярного выражения. Я немного изменил его, чтобы соответствовать моим требованиям, и протестировал его в Search->Regex Forward, и он правильно выделил каждое предложение @param.
Я использовал следующее регулярное выражение "^\s-*\*\s-*\(@param\).*$"
Итак, я попытался установить данное регулярное выражение в качестве начала моего абзаца (с добавлением, необходимым для синтаксиса elisp) в моем файле.emacs. Когда я открыл новое окно emacs и опробовал Mq, возникла та же ошибка. Есть что-то, чего мне не хватает? Используется ли Mq по-другому в c-режиме? Должен ли я проверить мой файл.emacs на предмет чего-то, что может вызвать ошибку здесь? Любая помощь будет оценена.
Спасибо Райан
1 ответ
Относительно вашего вопроса: "Используется ли Mq по-другому в c-mode?", describe-key
(привязан к Ch k) твой друг. При посещении буфера с файлом C введите Ch k Mq, и он точно скажет, с какой функцией Mq связан. В этом случае это c-fill-paragraph
который в конечном итоге использует paragraph-start
переменная, которую вы нашли в этом другом вопросе.
Я обнаружил, что это регулярное выражение используется как paragraph-start
обернет строки и обработает каждый @param как новый абзац:
"^[ ]*\\(//+\\|\\**\\)[ ]*\\([ ]*$\\|@param\\)\\|^\f"
Тем не менее, он не будет делать отступы, как вы хотите. Это сделает ваш пример похожим на это:
/**
* Description
*
* @param[in,out] var1 : <Long description that needs
* to be wrapped.>
* @param[in,out] var2 : <Description2>
*/
Я надеюсь, что это все еще работает лучше для вас. Дай мне знать, если разберешься с отступом.