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>
 */

Я надеюсь, что это все еще работает лучше для вас. Дай мне знать, если разберешься с отступом.

Другие вопросы по тегам