Vim自动硬包装C ++中的长注释?

时间:2014-12-13 12:20:34

标签: c++ vim comments wrapping

重现我的问题:

$ vim -u NONE test.cpp
:set nocompatible
:set tw=20
:set fo=croql

现在输入以下文字:

/*
    test test test test test test test test test
*/

请注意,包含测试的行上有没有前导星号。 Vim默认会插入它,将其删除。

Vim应该自动换行,但它没有。

如何在评论中自动将Vim自动换行,仅在评论中:set fo+=t有效,但随后一切都被包裹起来,我不想自动硬包装代码。

2 个答案:

答案 0 :(得分:4)

使用我的OnSyntaxChange plugin,您可以根据评论中的光标是否更改'fo'选项值:

call OnSyntaxChange#Install('Comment', '^Comment$', 0, 'a')
autocmd User SyntaxCommentEnterA setlocal fo+=t
autocmd User SyntaxCommentLeaveA setlocal fo-=t

答案 1 :(得分:3)

很抱歉,但是Vim本身不能配置为在多行注释中自动换行文本,行的开头没有一些字符。评论'选项控制Vim如何识别自动换行的注释。多行注释必须包含""," e"和" m"参与评论'选择被认可; :help format-comments:"三件式注释必须有一个中间字符串,否则Vim无法识别中间行。"

然而,您仍然可以使用 g q 运算符手动重新格式化这些行(缩写 g q q 对于单行而言,Vim应该主要做你想要的。如果稍微关闭,你可以搞乱' formatexpr'选项。

你可能最好只使用多行评论中的前导*或使用//风格的评论。

有些插件可以巧妙地使用语法定义的区域,这可以让您解决这些限制。见Ingo的回答。