Vim 中带有智能缩进或文件类型缩进的奇怪缩进行为
Odd indentation behaviour in Vim with smartindent or filetype indent on
我发现缩进,无论有没有选择,并不总是有效,这似乎是因为这些设置。
据我所知,这是代码有效且正确缩进的时间,但它不会发生在任何地方。除了下面的例子之外,我还没有找到一种模式。
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
之外的任何正确代码,例如:- <<</kbd>或>>
std::getline(std::cin, move);
- viB<</kbd> 在
std::cout << "Enter move (x,y): ";
处,从而缩进块
- <<</kbd>或>>
- >>或>>
#include
是否错误缩进 - 如果从包含中删除
#
,使代码不正确,>>工作
不缩进:
- >>
#include <iostream>
- VIP> 在
:1
,从而选择包含并尝试缩进它们
如果缩进失败,即使实际上没有更改任何字符,文件仍会标记为已更改。
- 这是正确的行为吗?
- 为什么 Vim 会区分正确的代码?
- 我想保留
smartindent
功能,但即使 Vim 认为它是正确的,仍然能够手动缩进代码。
如果需要,我的 Vim 配置。
根据smartindent
的文档,您看到的行为是正确的。以下是关于#缩进的相关部分
键入"#"作为新行中的第一个字符时,缩进 该行被删除,"#"放在第一列中。 缩进 为下一行恢复。 如果您不想要这个,请使用这个 映射:":inoremap # X^H#",其中 ^H 使用 CTRL-V CTRL-H 输入。 使用">>"命令时,不会移动以"#"开头的行 右。
手动移动它的一种方法是 更改cinkeys
.此选项默认为 "0{,0},0),:,0#,!^F,o,O,e"
,其中第五个选项为 0#
。根据此处的帮助表单,更改#
缩进的行为。(注意:您需要向上滚动一段(
如果出现以下情况,Vim 会在第 1 列中放置一行: - 它以"#"(预处理器指令(开头,如果"cinkeys"包含"#"。
要从cinkeys
中删除它,您可以将以下内容放入您的 vimrc 中
set cinkeys-=0#
您可能也应该将其从indentkeys
中删除。
set indentkeys-=0#
相关文章:
- clang格式:宏的缩进
- C++setiosflags函数操纵器-未确定的缩进
- VSCode 中带有 C/C++ 扩展名的多行注释缩进错误
- 如何使用c++调整文本文件中代码的缩进?
- 如何在C++中制作 clang 格式的缩进 extern C 块?
- 在 vscode 中使用特定缩进/对齐 C/C++ 自动格式化
- "If Else"语句缩进在C++中是否重要?
- CLion 行注释的不一致自动缩进
- 如何在用户按Enter键时控制wxStyledTextCtrl中的行缩进
- 如何在 QLabel 中将缩进设置为 QImage
- 如何使 clang 格式将所有详细信息命名空间缩进一个
- 是否可以更改 Xcode 缩进注释行的方式
- 用libxml2缩进合并的XML文件
- 精美的C 容器,具有级别的缩进
- 如何在使用clang-format访问修饰符后缩进
- 如何使用Visual Studio轻松缩进标头声明
- 禁止 emacs 中的 c++ 命名空间缩进
- 我怎样才能让 Emacs 用我的代码缩进我的 // 注释
- Visual Studio c++代码格式-返回类型+ classname::func缩进
- Vim 中带有智能缩进或文件类型缩进的奇怪缩进行为