在Vim中按括号列索引缩进代码?

在Vim中按括号列索引缩进代码?,vim,erlang,indentation,Vim,Erlang,Indentation,我正在使用Vim编辑Erlang代码。我习惯(大多数Erlang程序员都这样做)按括号范围缩进Erlang代码。例如,C通常在花括号内缩进一个制表符宽度: int main(void) { printf("hello, world\n"); return 0; } 在Erlang中,通常根据括号开始的列缩进: ?assertError({bad_options, [{foo, bar}, bad_option]},

我正在使用Vim编辑Erlang代码。我习惯(大多数Erlang程序员都这样做)按括号范围缩进Erlang代码。例如,C通常在花括号内缩进一个制表符宽度:

int main(void) {
    printf("hello, world\n");
    return 0;
}
在Erlang中,通常根据括号开始的列缩进:

?assertError({bad_options, [{foo, bar},
                            bad_option]},
             lhttpc:request("http://localhost/", get, [], <<>>, 1000,
                            [bad_option, {foo, bar}])).

有没有办法在Vim中执行此缩进,如果有,如何执行?

看起来您需要深入研究
cindent
cinoptions
的黑暗世界。我相信,在vimrc中加入以下内容将部分满足您的需求:

set cindent
set cinoptions+=(0
但问题是这将如何影响其他行为。有关更多信息,请参见帮助选项值。应该可以精确地实现您想要的,但可能需要一些实验


希望这有帮助。

vimerl的一个分支实现了“上下文感知缩进”而不是“静态缩进”:


似乎有效,所以我将继续使用它一段时间。

您尝试过吗?我意识到我实际上使用的是
vimerl
,并更新到了最新版本。但是没有,它仍然缩进到1(或者有时是2,很奇怪)的标签宽度。看起来有点有希望,但我不知道该使用什么选项。尝试了很多东西,但没有得到任何远程可用的东西。由于Erlang插件有自己的缩进,所以怀疑它也会把事情弄糟。您是否尝试过使用
set-cinoptions?
查找Erlang更改设置的值(没有任何更改)?插件是否声称可以改善缩进?如果是这样,可能很难从插件外部进行调整。默认值
cinoptions
似乎为空。这个插件似乎做了一些工作,这可能使它很难修复。嗨,@Adam Lindberg。已经一个星期了。你觉得维默尔怎么样?我的要求和你完全一样。谢谢那把叉子好像是根据我的需要缩进的。
set cindent
set cinoptions+=(0