vim 的自定义 'smartindent' 脚本

custom 'smartindent' script for vim

我目前正在投入一个缩进样式有点特殊的新项目。基本规则是使用 'keyword+blank' 个空格来缩进下一行。

例如:

if () {
   // indent 3 spaces here
}

while () {
      // indent 6 spaces here
}

有一些(或很多)例外情况:

1) 是否已经有可用的插件可以帮我做到这一点?根据其中一位开发人员的说法,这称为 'smart identation'。不幸的是 VIM 的 smartindent 做了一些不同的事情。

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

我不知道有任何这样的插件,恕我直言,这个方案一点也不聪明

但是,完全可以编写自定义 indent 插件 来实现您的确切要求。参见:help 'indentexpr';此外,Vim 在 $VIMRUNTIME/indent/*.vim 中附带了几个缩进插件,可以作为灵感。

基本上,算法是这样的:

  • 检查前一行是否有一个关键字(ifwhile,依此类推)。
  • 如果匹配,计算偏移量并将其添加到上一行的缩进中(indent(v:lnum - 1));否则,按原样使用上一行的缩进。
  • 如果该行包含 },找到匹配 { 的行,并使用该行的缩进。