2
我通常使用vim re-indent操作符('=')來根據其語法縮進我的源代碼。我也在整個文件中使用它,特別是如果我必須閱讀其他人編寫的源代碼,並且他們有不同的標籤設置或類似的東西('gg = G'真的有幫助的話)。這是唯一的問題,當我有類似如何在有註釋的大括號中使用vim縮進行?
(1) int main() {
(2) for (int i=0; i<3; i++) {
(3) //for (int i=0; i<4; i++) {
(4) std::cout << i << std::endl;
(5) }
(6) }
當我試圖縮進這個代碼,我得到以下縮進層次:
(1) level 0 (which is good)
(2) level 1 (also)
(3) level 2 (could be 1, but I can live with that)
(4) level 2 (good)
(5) level 1 (good)
(6) level 1 (this is the problem)
所以行右括號(5)關聯第(3)行中的左括號是註釋掉的,因此不是語法的一部分。第(6)行的右括號與(2)中的開頭的一對配對,這是錯誤的。此問題也會影響其餘代碼,因爲在此之後發生的函數將不會對齊到級別0,而是從級別1開始。
如果光標位於第(5)行的大括號中,那麼正確的匹配(2)中的括號突出顯示,但按'%'跳到第(3)行。這個問題解決了here,但假設的解決方案(一個名爲matchit的插件)只修正了%,而不是=。
有誰知道解決這個問題的插件或破解?
在此先感謝。
感謝您的建議。這確實適用於縮進整個文件,但如果我只想使用'=='縮進單行,程序將返回錯誤代碼2並將字符串'indent:Standard input:2:Error:意外的文件結尾'到我的源文件中。我將不得不看看這是否值得,也就是說,如果我只需要「縮進整個文件」和「縮進直到匹配括號」功能。 –
@ViktorDick來抑制這個警告,'autocmd FileType c,cpp set equalprg = indent \ 2>/dev/null \ -gnu; true' – zhazha