2011-11-01 38 views
10

昨日まで、私はすぐに使えるemacs + erlang-modeの幸せなユーザーでした。私の同僚は(いくつかのウィンドウエディタを使用して)プロジェクトに貢献し始めました。そして、彼はerlang-modeによってデフォルトで使用されている混合インデントモードにはあまり満足していないようです。 例を示します。あなたがよく見ている場合のerlang-モード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} -> 

で自動インデントを使用して記述された機能のこの部分は、あなたは4つのスペースでインデントされたライン2(GetReqIdsで始まる)を参照してくださいよ。 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

特に、プロジェクトで異なるエディタ/エディタが使用されている場合は、すべての言語で同じコードを使用してください。タブで3〜7の余分なバイトを節約する価値はありません。 –

+0

@HolgerJust - これはちょうど私が現時点で感じている正確な方法です:) – loxs

+0

私は、タブが一番良いと思っていました。(バイトを節約するように:-p今真剣に、アライメントの取れないインデントを見つけるのは難しいキャラクター)。しかし最後には、最も美しい方法がミキシングであると感じました。つまり、シンタクティックインデントのタブと内部のアラインメントのスペースです。 – fortran

答えて

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

+3

右。バッファ内のすべてのTABをスペースに変換するには: 'C-x h'を使用してすべてを選択し、 'M-x untabify'を発行します。 – alexurba

2

へ通常はインデントのタブを無効にするだけでなく、erlang-modeでも使用できます。

(set-default 'indent-tabs-mode nil) 
関連する問題