Vim自动硬包装长注释C++

Vim automatic hard wrapping long comments in C++?

本文关键字:注释 C++ 包装 Vim      更新时间:2023-10-16

重现我的问题:

$ 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工作,但随后一切都被包装了,我不希望代码自动硬包装。

使用我的 OnSyntaxChange 插件,您可以根据光标是否在注释内更改'fo'选项值:

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

它也可以在GitHub上找到。

抱歉,Vim 本身无法配置为在多行注释中自动换行,而行首没有一些字符。"注释"选项控制 Vim 如何识别自动换行的注释。多行注释必须在"注释"选项中包含"s"、"e"和"m"部分才能被识别;:help 格式注释 说:"三段注释必须有一个中间字符串,否则 Vim 无法识别中间行。

尽管如此,您仍然可以使用 g q 运算符(单行的简写 g q q(手动重新格式化这些行,Vim 应该主要执行您想要的操作。如果它稍微偏离,你可以弄乱"formatexpr"选项。

您可能最好只在多行注释中使用前导 *,或使用//-样式注释。

有一些插件以巧妙的方式使用语法定义的区域,这可能允许您解决这些限制。请参阅Ingo的答案。

我正在使用 VIM 8.2,它可以包装开箱即用的注释。

简答如何

set tw=80
set fo=croaq

使用:set comments?检查您的comments选项。我必须包含/***/序列。

长答案

您可以在:help formatoptions:help fo-table:help comments中阅读详细信息。

tw=80选项用于限制线宽。

formatoptions在此处使用下一个标志:

  • c标志是仅对注释应用换行
  • ro 标志用于在新行上自动插入注释引线(*符号表示/*类 C 语言中的样式注释(。
  • a将在您键入时自动设置段落格式。
  • q选项将以正确的方式处理注释引线。

对于某些类型的缓冲区,您可以为所有文本应用格式选项,如下所示:

  "Limit line width for git commit messages to 72 characters
autocmd FileType gitcommit setlocal tw=72
  "Auto format all text for git commit messages and markdown files
autocmd FileType gitcommit,markdown setlocal formatoptions+=t

这里

  • t标志是对文本应用换行(除了c(

comments选项将帮助 vim 正确检测注释。