使用Doxygen评论的Emacs c-mode fill-paragraph

时间:2009-12-29 00:02:11

标签: emacs doxygen c-mode

我有一个与Getting Emacs fill-paragraph to play nice with javadoc-like comments非常相似的问题,但我不确定我是否会在一年前的帖子中得到很多答案。

无论如何,我的C代码有一些Doxygen注释,如下所示:

/**
 * Description
 *
 * @param[in,out] var1 : <Long description that needs to be wrapped.>
 * @param[in,out] var2 : <Description2>
 */

现在,当我在emacs中使用M-q时,我想要以下内容:

/**
 * 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中设置paragraph-start变量来识别“@param”。我发现了另一个关于堆栈溢出的问题(Getting Emacs fill-paragraph to play nice with javadoc-like comments),它有一个样本正则表达式。我修改了一下以符合我的要求,我在Search-&gt; Regex Forward中进行了测试,它正确地突出显示了每个@param句子。

我使用了以下正则表达式"^\s-*\*\s-*\(@param\).*$"

所以,我尝试将给定的正则表达式设置为我的.emacs文件中的段落开头(添加了elisp语法所需的)。当我打开一个新的emacs窗口并尝试了M-q时,发生了同样的错误。有什么我想念的吗? M-q在c模式下的使用方式不同吗?我应该检查我的.emacs文件中是否有可能导致错误的内容吗?任何帮助将不胜感激。

谢谢, 莱恩

1 个答案:

答案 0 :(得分:3)

关于你的问题,“M-q在c模式下的使用方式不同吗?”,describe-key(绑定到C-h k)是你的朋友。在使用C文件访问缓冲区时,键入C-h k M-q,它将准确地告诉您M-q绑定的函数。在这种情况下,它是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>
 */

我希望它对你来说仍然有效。如果你弄清楚缩进,请告诉我。