我发现无论有没有选择,缩进并不总是有效,而且似乎是因为这些设置。
从我可以告诉它的代码是有效和正确缩进的,但它不会发生在任何地方。除了下面的例子,我还没有找到一个模式。
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);
std::cout << "Enter move (x,y): ";
,因此缩进块#include
被错误地缩进,则#
,则代码不正确,&gt;&gt; 正常工作不缩进:
#include <iostream>
:1
,因此选择包含并尝试缩进它们如果缩进失败,即使实际没有更改任何字符,文件仍会标记为已更改。
smartindent
功能,但即使Vim认为它是正确的,仍然可以手动缩进代码。 如果需要我的Vim configuration。
答案 0 :(得分:2)
根据smartindent
的文档,您看到的行为是正确的。以下是#indenting
当键入“#”作为新行中的第一个字符时,缩进为 该行被删除,'#'放在第一列。缩进 恢复下一行。如果你不想这样,请使用它 mapping:“:inoremap#X ^ H#”,其中^ H是用CTRL-V CTRL-H输入的。 使用“&gt;&gt;”时命令,以'#'开头的行不会移位 右。
手动转移它的一种方法是更改cinkeys
。此选项默认为"0{,0},0),:,0#,!^F,o,O,e"
,其中第五个选项为0#
。根据帮助表单here更改#
缩进的行为。 (注意:你需要向上滚动一段)
如果符合以下条件,Vim会在第1列中添加一行: - 如果'cinkeys'包含'#',则以'#'(预处理程序指令)开头。
要从cinkeys
中删除此内容,您可以将以下内容放入vimrc
set cinkeys-=0#
你也应该从indentkeys
删除它。
set indentkeys-=0#