缩进Erlang的正确方法是什么?

时间:2011-11-01 10:15:46

标签: emacs erlang indentation

直到昨天,我还是一个开箱即用的emacs + erlang-mode的用户。然后我的同事开始为该项目做贡献(使用一些Windows编辑器),似乎他对erlang-mode默认使用的混合缩进模式不太满意。 这是一个例子。这是函数的一部分,在erlang-mode

上使用自动缩进编写
handle_info(get_gss_latest_versions, State) ->
    GetReqIds = fun(Branch) ->
            GetInfoUri = State#state.gss_uri ++ Branch ++ "/api/getinfo",
            case ibrowse:send_req(GetInfoUri, [], get, [], [{stream_to, self()}]) of
                {ibrowse_req_id, ReqId} ->
                {ReqId, Branch};
                {error, Reason} ->

如果你仔细看一下,你会看到第2行(以GetReqIds开头)缩进4个空格。第3行缩进3个制表符。第5行缩进,有3个标签+4个空格。第6行缩进4个标签。因此,大多数(哑)编辑器(与emacs不同)显示第5行和第6行(以{ibrowse和{ReqId}开头的行在同一缩进级别)。哪个看起来很难看。 (甚至stackoverflow以这种方式显示它们)。

我看了几个着名的erlang软件(比如gproc),其中大多数似乎都使用了仅限空格的缩进模式。

所以我的问题是:

  1. 我做错了(我觉得很可能)。
  2. 如果仅限空格是主要的缩进方式,为什么erlang-mode没有实现它(或者默认情况下没有配置为使用它)?
  3. 如何配置erlang-mode以强制仅限空格?
  4. 毕竟“正确的道路”是什么?像交叉编辑器兼容性这样的事情似乎很重要,我们不能让所有编辑器像emacs一样聪明。

2 个答案:

答案 0 :(得分:6)

这对我来说似乎是正确的解决方案,目前(放入〜/ .emacs):

(add-hook 'erlang-mode-hook '(lambda() (setq indent-tabs-mode nil)))

我从这里无耻地复制它: http://erlang.2086793.n4.nabble.com/erlang-mode-emacs-tabs-vs-spaces-td2096289.html

答案 1 :(得分:2)

通常禁用indention中的标签,不仅是erlang模式,还可以使用:

(set-default 'indent-tabs-mode nil)