【问题标题】:Emacs c-mode fill-paragraph with Doxygen CommentsEmacs c-mode fill-paragraph with Doxygen
【发布时间】:2009-12-29 00:02:10
【问题描述】:

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

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

/**
 * 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 中设置段落开始变量来识别“@param”。我发现另一个关于堆栈溢出的问题 (Getting Emacs fill-paragraph to play nice with javadoc-like comments),它有一个示例正则表达式。我对其进行了一些修改以满足我的要求,并在 Search->Regex Forward 中对其进行了测试,它正确地突出了每个 @param 句子。

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

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

谢谢, 瑞恩

【问题讨论】:

    标签: emacs doxygen c-mode


    【解决方案1】:

    关于您的问题,“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>
     */
    

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

    【讨论】:

    • 我尝试添加您在我的 .emacs 文件中提到的正则表达式,但我仍然遇到同样的问题,即第二个 @param 未被识别为新段落。我意识到修复段落状态不会解决我的缩进问题,但这将是一个非常有帮助的起点=)。在写完最初的帖子后,我意识到我应该注意到这实际上是一个由两部分组成的问题:1)将@param 识别为一个新段落。 2) 正确缩进描述。
    • 当你在这个文件的缓冲区中时,C-h v paragraph-start 返回什么?如果不是上面的正则表达式,那么你可能已经全局设置了它,它可能会被 c-mode 覆盖。如果是这种情况,那么您可以在 c-mode 挂钩中设置它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    相关资源
    最近更新 更多