用于vim的自定义“智能缩进”脚本

用于vim的自定义“智能缩进”脚本,vim,indentation,Vim,Indentation,我目前被投入到一个新项目中,缩进样式有点特殊。基本规则是使用“关键字+空格”来缩进下一行 例如: if () { // indent 3 spaces here } while () { // indent 6 spaces here } 有一些或很多例外: else if:使用与3相同数量的空格 开关/案例2空间中的案例 ... 1已经有一个插件可以为我做这件事了吗?据一位开发者称,这被称为“智能识别”。不幸的是,VIM的smartindent做了一些不同的事情 2如果1

我目前被投入到一个新项目中,缩进样式有点特殊。基本规则是使用“关键字+空格”来缩进下一行

例如:

if () {
   // indent 3 spaces here
}

while () {
      // indent 6 spaces here
}
有一些或很多例外:

else if:使用与3相同数量的空格 开关/案例2空间中的案例 ... 1已经有一个插件可以为我做这件事了吗?据一位开发者称,这被称为“智能识别”。不幸的是,VIM的smartindent做了一些不同的事情


2如果1的答案是否定的。是否有一种简单的方法来配置vim以遵守这些规则

我不知道有这样的插件,我觉得这个方案一点也不聪明

但是,完全可以编写一个定制的缩进插件来实现您的确切需求。请参阅:帮助“indentexpr”;另外,Vim在$VIMRUNTIME/indent/*.Vim中附带了几个可作为灵感的缩进插件

基本上,算法是这样的:

检查前一行中的关键字if、while等。 如果存在匹配项,则计算偏移量并将其添加到前一行的缩进缩进V:lnum-1;否则,请按原样使用前一行的缩进。 如果该行包含},则查找具有匹配{的行,并使用该行的缩进。
回复的一个答案建议使用一个名为的插件。如果您有符合所需缩进规则Hanks的现有文件,这会很方便,但我认为这不会起作用。vim提供的tabstop等参数中的信息无法保持我描述的缩进样式。