用 vim 写代码,中有时需要限制每行最多的字符数,比如C++代码一般是每行最多80个字符。于是,我们很自然觉得在 vimrc 中设置如下语句应该没有问题
set textwidth=80
"t in fo-table means auto-wrap text using textwidth
set formatoptions+=t
:help formatoptions
:help fo-table
然而,我们发现这样的设置并不奏效。
在 vim 中使用如下命令可以查看我们的设置是否有效。
:set formatoptions
我们会看到,其实,t 并没有出现在 formatoptions 中。
原因在于,我们开启了 ftplugin。vim 会先读入 vimrc 的配置,接着检测文件类型,重新对 vim 的配置进行设置,即我们在 vimrc 的配置被覆盖了。
解决办法可以采用 vim 帮助文档提供的标准解决方法,命令如下
:help ftplugin-overrule
但是,这些解决方法我觉得都比较麻烦,我采用的方法是,在 vimrc 中增加如下配置
autocmd FileType c,cpp setlocal textwidth=80 formatoptions+=t
这样做可以解决问题,原因是 vim 启动时先读 vimrc 的配置,接着使用 ftplugin 对应的文件类型的配置文件对 vim 进行设置,最后,由于我们在 vimrc 定义了函数,检测到文件类型为 c 或者 cpp,那么,再 setlocal。你如果想要对所有的文件类型都使用配置,而不仅仅是 c 和 cpp,那么,将命令改为如下即可。
autocmd FileType * setlocal textwidth=80 formatoptions+=t
本文详细解释了如何在Vim中通过修改配置文件来限制代码行数,特别是针对C++代码每行不超过80个字符的场景。通过设置`settextwidth`、`tinfo-tablemeansauto-wraptextusingtextwidth`和`setformatoptions+=t`,并利用`autocmd`函数确保特定文件类型的配置生效,避免被`ftplugin`覆盖。
853

被折叠的 条评论
为什么被折叠?



