多行 C 注释的 Vim 不同的文本宽度?
Posted
技术标签:
【中文标题】多行 C 注释的 Vim 不同的文本宽度?【英文标题】:Vim different textwidth for multiline C comments? 【发布时间】:2011-03-29 08:27:55 【问题描述】:在我们的 C++ 代码库中,我们保留了 99 列行,但保留了 79 个奇数列的多行 cmets。是否有一个很好的策略来自动执行此操作?我假设这些模式是已知的,因为智能注释行连接和前导 * 插入。
【问题讨论】:
您可以设置自定义formatexpr
或formatprg
,但这需要编写vim 插件或外部格式化程序,详情请参阅帮助。我不知道有任何插件可以为您执行此操作,但我不确定它们是否存在。
您介意发布示例代码或提供一些您想要格式化的代码的链接吗?没有承诺,但我也许可以编写一个简单的格式化程序。
@molecules:我不是在寻找格式化程序,只是在我在多行注释中输入时自动知道我的 textwidth 是 79 而不是正常的 99。
【参考方案1】:
我遇到了同样的问题,并认为我找到了合适的解决方案。
我希望我的 cmets 自动换行,这样我在打字时就不必担心文本格式。这适用于评论文本。但是我对使用 vim 格式化我的代码感到不舒服。所以我希望 vim 在 x 列之后用红色突出显示所有内容。
要仅使用 cpp 代码执行此操作,您需要将以下内容添加到 ~/.vim/ftdetect/cpp.vim 文件中。
set textwidth=79
match ErrorMsg '\%>99v.\+'
注意:如果文件和文件夹不存在,您可能需要创建它们。
如果您对此有疑问,请确保您将 formatoptions 设置为:
formatoptions=croql
你可以通过在 vim 中运行 :set formatoptions 来看到这一点。
【讨论】:
对不起,但不——这与我提出的这个问题的解决方案相同:***.com/questions/235439 在整个地方突出显示垃圾比我希望的要精细得多!跨度> 【参考方案2】:显然 code 和 cmets 都使用相同的 textwidth
选项。据我所知,唯一的技巧是动态设置此选项:
:autocmd CursorMoved,CursorMovedI * :if match(getline(.), '^\s*\*') == 0 | :setlocal textwidth=79 | :else | :setlocal textwidth=99 | :endif
这里的关键部分是检测我们何时在评论中。如果您只以这种方式格式化 cmets:
/*
* my comment
*/
我的正则表达式应该可以工作...除非您的代码中有以*
开头的行(我猜这可能发生在C
中,在C++
中发生的频率较低)。如果你像这样使用 cmets:
// comment line 1
// comment line 2
正则表达式更容易编写。如果您想涵盖所有可能的情况,包括极端情况,那么……我想最好的办法是定义一个单独的检测函数并从 :autocmd
而不是 match()
调用它。
【讨论】:
+1,我会发布一个类似的提议,但它会与这个相同。 这对性能有什么影响?如果我通过 SSH 连接到服务器,这会显着增加我的延迟吗? 不会@Kazark,所有逻辑都在 Vim 内部执行(即服务器端)。话虽如此,如果您在本地使用它(即不通过 SSH),它会以同样的方式影响性能以上是关于多行 C 注释的 Vim 不同的文本宽度?的主要内容,如果未能解决你的问题,请参考以下文章