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

lox*_*oxs 10 emacs erlang indentation

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

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} ->
Run Code Online (Sandbox Code Playgroud)

如果你仔细看一下,你会发现第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一样聪明.

lox*_*oxs 6

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

(add-hook 'erlang-mode-hook '(lambda() (setq indent-tabs-mode nil)))
Run Code Online (Sandbox Code Playgroud)

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

  • 对.并将缓冲区中的所有TAB转换为空格:使用"Cx h"选择所有内容,然后发出"Mx untabify". (3认同)