用 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