2011-11-01 45 views
10

Cho đến ngày hôm qua, tôi là một người dùng hạnh phúc của các emacs out-of-the-box + erlang-mode. Sau đó, đồng nghiệp của tôi bắt đầu đóng góp cho dự án (sử dụng một số trình soạn thảo cửa sổ), và có vẻ như anh ta không hài lòng với chế độ thụt lề hỗn hợp được mặc định bởi chế độ erlang. Đây là một ví dụ. Đây là một phần của một hàm, viết bằng auto-indent trên erlang-modeCách thích hợp để thụt lề Erlang là gì?

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} -> 

Nếu bạn có một cái nhìn gần hơn, bạn sẽ thấy rằng dòng 2 (bắt đầu với GetReqIds) được thụt vào với 4 không gian. Dòng 3 được thụt lề với 3 tab. Dòng 5 được thụt lề với 3 tab + 4 dấu cách. Dòng 6 được thụt lề với 4 tab. Kết quả là, hầu hết các trình soạn thảo (câm) (không giống như emacs) hiển thị các dòng 5 và 6 (các dòng bắt đầu bằng {ibrowse và {ReqId) ở cùng một mức thụt đầu dòng. Trông có vẻ xấu xí. (thậm chí stackoverflow cho thấy chúng theo cách đó).

Tôi đã xem xét một số phần mềm erlang nổi bật (như gproc) và hầu hết trong số chúng dường như chỉ sử dụng chế độ thụt lề không gian.

Vì vậy, câu hỏi của tôi là:

  1. Am Tôi làm việc đó sai (dường như có khả năng tôi).
  2. Nếu không gian chỉ là cách thụt lề chiếm ưu thế, tại sao chế độ erlang không thực hiện nó (hoặc không được định cấu hình để sử dụng theo mặc định)?
  3. Làm cách nào tôi có thể định cấu hình chế độ xóa để buộc chỉ không gian?
  4. Thế nào là "đúng cách"? Những thứ như khả năng tương thích giữa các biên tập viên có vẻ quan trọng và chúng tôi không thể làm cho tất cả các biên tập viên thông minh như các emacs.
+2

tôi có thể nói, không gian chỉ được ưa thích m ode cho tất cả các ngôn ngữ, đặc biệt trong trường hợp các trình soạn thảo/id khác nhau được sử dụng trong dự án. 3 đến 7 byte bổ sung được lưu theo tab không đáng giá. –

+0

@HolgerJust - Đó chính xác là cảm giác của tôi ngay lúc này :) – loxs

+0

Tôi từng nghĩ rằng các tab chỉ là tốt nhất (vì nó tiết kiệm byte :-p bây giờ nghiêm túc, bởi vì khó có thể lấy được indents chưa được sắp xếp bởi chỉ một điểm khó tính cách). Nhưng cuối cùng, tôi cảm thấy rằng cách đẹp nhất là trộn: các tab thụt lề cú pháp cộng với khoảng trống để căn chỉnh bên trong. – fortran

Trả lời

6

Điều này dường như là giải pháp phù hợp với tôi, ngay tại thời điểm này (đặt trong ~/emacs):

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

Tôi không biết xấu hổ sao chép nó từ đây: http://erlang.2086793.n4.nabble.com/erlang-mode-emacs-tabs-vs-spaces-td2096289.html

+3

Phải. Và để chuyển đổi tất cả TAB trong bộ đệm của bạn thành dấu cách: hãy chọn mọi thứ bằng 'C-x h' và sau đó phát hành 'M-x untabify'. – alexurba

2

Để nói chung là vô hiệu hóa các tab trong indention, không chỉ, mà còn cho erlang-mode, sử dụng:

(set-default 'indent-tabs-mode nil) 
Các vấn đề liên quan