我正在使用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}])).
(上面的例子是缩进的,不是根据主观美貌得出的。)
如果在新行上启动块,则将使用制表符宽度:
?assertError(
{bad_options, [{foo, bar}, bad_option]},
lhttpc:request(
"http://localhost/", get, [], <<>>, 1000,
[bad_option, {foo, bar}]
)
).
我的.vimrc的相关部分:
set expandtab " Spaces for tabs "
set tabstop=4 " Tab width 4 "
set shiftwidth=4
set smarttab
set autoindent
" Enable filetype plugin "
filetype plugin on
filetype indent on
有没有办法在Vim中执行这种缩进,如果有,怎么办?
答案 0 :(得分:4)
有一个vimerl的分支,它实现了“上下文感知缩进”而不是“静态缩进”:https://github.com/aszlig/vimerl.git
似乎工作,所以我会推迟一段时间。
答案 1 :(得分:1)
这看起来你需要深入研究cindent
和cinoptions
的阴暗世界。我相信将以下内容放入您的vimrc将部分满足您的需求:
set cindent
set cinoptions+=(0
但问题是这将如何影响其他行为。有关更多信息,请参阅help cinoptions-values
。它应该可以精确地实现你想要的,但它可能需要一些实验。
希望这有帮助。