繁体   English   中英

如何在vim中自动缩进右括号

[英]How to autoindent closing brace in vim

我要输入

tag {
}

当我在{之后点击'enter'时,我的光标缩进了2个空格(在第3列中)。 (选项卡对我来说是2个空格。)然后,当我输入} (仍在第3列)时,我希望}移至第1列。

当我在.cpp文件中执行此操作时,光标会自动移动到第1列。

当我在另一个文件(本例中为.wiki中执行此操作时,它不会移动。 }出现在第3列中。

我以为这是由'autoindent'和'smartindent'控制的,这两个都是在Wiki文件的情况下设置的。 我想念什么?

我还可以提供哪些其他配置信息来帮助调试? 如何比较cpp文件和wiki文件之间的配置选项?

(为清楚起见,请编辑:我使用的是vimwiki插件中定义的'.wiki'文件类型。)

问题出在插件处理列表编辑的方式上。 令人惊讶的是,因为tag { }构造可能不应该被视为一个。 要插入一个新的列表标记,该插件重新定义了一些映射,它们在:help vimwiki-lists中提到。 即, oO在正常模式下, <CR>在插入模式下。 smartindent进行交互时,它们映射为具有几乎相同的行为:通过在新行上插入和删除虚拟字符来禁用去凹入(例如,参见此处 )。 之所以可行,是因为::in :help smartindent缩排仅在大括号是您在行中键入的第一行时才发生。

可以通过删除相关映射来禁用此功能,但是这样做也会破坏插件的列表系统。 要解决此问题 ,您可以使用其他一些键来复制这些映射。

这可能值得与插件的作者讨论,我不认为将所有内容都作为缩进目的视为列表的一部分确实是他们的意图。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM