在我们的C ++代码库中,我们保留了99个列行但79个奇数列的多行注释。是否有一个很好的策略来自动执行此操作?我认为模式已经因为智能注释行连接和前导*插入而已知。
答案 0 :(得分:16)
显然,代码和注释都使用相同的textwidth
选项。据我所知,唯一的技巧是动态设置此选项:
:autocmd CursorMoved,CursorMovedI * :if match(getline(.), '^\s*\*') == 0 | :setlocal textwidth=79 | :else | :setlocal textwidth=99 | :endif
这里关键部分是检测我们何时进行评论。如果您只是这样格式化评论:
/*
* my comment
*/
我的正则表达式应该有效...除非你的代码中的行以*
开头(我想这可能发生在C
中,C++
中的频率较低)。如果你使用这样的评论:
// comment line 1
// comment line 2
正则表达式甚至更简单。如果你想要涵盖所有可能的情况,包括极端情况......我想最好的办法是定义一个单独的检测功能,并从:autocmd
而不是match()
调用它。
答案 1 :(得分:1)
我遇到了同样的问题,并认为我找到了合适的解决方案。
我希望自己的评论能够自动换行,这样当我打字时,我不必担心格式化文本。这适用于评论文本。但我对使用vim格式化代码感到不舒服。所以我希望vim在x列之后用红色突出显示所有东西。
要仅使用cpp代码执行此操作,您需要将以下内容添加到〜/ .vim / ftdetect / cpp.vim文件中。
set textwidth=79
match ErrorMsg '\%>99v.\+'
注意:如果文件和文件夹不存在,您可能需要创建它们。
如果您遇到问题,请确保将formatoptions设置为:
formatoptions=croql
你可以通过在vim中运行:set formatoptions来看到这一点。