在我们的C++代码库中,我们保留99列行,但79多列的多行注释。有没有一种好的策略可以自动完成这个过程?我假设模式已经被识别出来,因为智能注释行连接和前导*插入。
显然,代码和注释都使用相同的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()
函数。
我遇到了同样的问题,认为我已经找到了一个合适的解决方案。
我希望我的注释可以自动换行,这样在输入时就不必担心格式化文本。这对于注释文本非常有效。但是我不想让vim格式化我的代码。所以我希望vim在x列后将所有内容都突出显示为红色。
要做到这一点,只需将以下内容添加到您的~/.vim/ftdetect/cpp.vim文件中即可。
set textwidth=79
match ErrorMsg '\%>99v.\+'
注意:如果文件和文件夹不存在,您可能需要创建它们。
如果您遇到问题,请确保您的formatoptions设置为:
formatoptions=croql
你可以在 vim 中运行 :set formatoptions 命令来查看。
formatexpr
或formatprg
,但这需要编写一个 Vim 插件或外部格式化程序,请参阅帮助以获取详细信息。我不知道是否有任何插件可以为您完成此操作,但我也不能确定它们不存在。 - ZyX