我發現縮進(無論有沒有選擇)並不總是有效,它似乎是因爲這些設置。
從我可以告訴它的代碼是有效和正確縮進時,但它不會發生在任何地方。除了下面的例子,我還沒有找到一個模式。Vim中使用smartindent或filetype縮進的奇數縮進行爲
set filetype plugin indent on
set smartindent
採取例如該C++代碼:
#include <iostream>
#include <sstream>
int main(void) {
std::string move;
int x, y;
char c;
while(true) {
std::cout << "Enter move (x,y): ";
std::getline(std::cin, move);
std::stringstream ss(move);
ss >> x; ss >> c; ss >> y;
std::cout << "x: " << x << "\n";
std::cout << "y: " << y << "\n" << std::endl;
}
}
縮進:
- 任何正確的代碼除了
#include
,例如:- < <或>>在
std::getline(std::cin, move);
- VIB <在
std::cout << "Enter move (x,y): ";
,由此縮進塊
- < <或>>在
- >>或>>如果
#include
是不正當縮進 - 如果
#
被移除從包括,使代碼不正確,>>作品
不縮進:
- >>在
#include <iostream>
- VIP>爲
:1
,從而選擇包括並試圖縮進他們
如果縮進失敗,文件仍然標記爲已更改,即使沒有通道字符實際上已經改變。
- 這是正確的行爲?
- 爲什麼Vim會區分正確的代碼?
- 我想保留
smartindent
功能,但即使Vim認爲它是正確的,仍然可以手動縮進代碼。
我的Vim configuration如果需要。
我建議不要使用Vim內置的C++等複雜語言的代碼縮進方法。將外部格式化工具與Vim集成會更好。例如,** [Uncrustify](https://github.com/bengardner/uncrustify)**,看看** [我的其他答案](http://stackoverflow.com/questions/12374200/using- uncrustify-with-vim/15513829#15513829)**瞭解如何做到這一點,如果你有興趣。 – 2013-05-06 14:23:52
@Haroogan謝謝你的建議,但我寧願不必使用一些第三方工具。除了Vim以外,我還沒有遇到任何Vim處理C++的麻煩。出於好奇,你面臨什麼問題? – timss 2013-05-06 14:31:14
從頭頂難以記住。但是當你更多地使用它時,你會不時發現一些惱人的怪癖,修復這些幾乎是不可能的,因爲Vim沒有全功能的C++分析器。縮進只能用正則表達式來完成,這對於簡單的語言(比如Python)來說很好,但對於C++來說卻不是。此外,您一定希望能夠根據自己的口味(或團隊慣例)調整格式化風格,而這對於內置的壓頭並不可行,而Uncrustify則提供超過1K的選項。 – 2013-05-06 14:37:05