2013-10-25 31 views
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

使用外部程序(如縮進)的而不是vim縮進:

  1. 安裝縮進(例如,命令和apt-get安裝縮進,在Linux上)
  2. 在VIM,設置equalprg變量:
:set equalprg=indent\ -kr\ -i8\ -ts8\ -sob\ -l80\ -ss\ -bs 
+0

感謝您的建議。這確實適用於縮進整個文件,但如果我只想使用'=='縮進單行,程序將返回錯誤代碼2並將字符串'indent:Standard input:2:Error:意外的文件結尾'到我的源文件中。我將不得不看看這是否值得,也就是說,如果我只需要「縮進整個文件」和「縮進直到匹配括號」功能。 –

+0

@ViktorDick來抑制這個警告,'autocmd FileType c,cpp set equalprg = indent \ 2>/dev/null \ -gnu; true' – zhazha

相關問題