2009-09-25 31 views
19

Khi tôi sử dụng chế độ python emacs, nếu ký tự cuối cùng của một dòng là dấu ngoặc đơn mở, nó thụt dòng tiếp theo chỉ một bước từ sự thụt đầu dòng trước đó.Cách kiểm soát thụt lề sau dấu ngoặc đơn mở trong Emacs

call_some_function(
    some_very_long_argument_that_I_want_to_put_on_its_own_line) 

Tôi thích điều đó. Bây giờ trong chế độ ecmascript (mà tôi đang sử dụng cho actionscript 3), nó luôn luôn thụt vào mức của dấu ngoặc đơn trước đó.

call_some_function(
        this_is_not_really_saving_me_any_horizontal_space); 

Làm cách nào tôi có thể tạo thụt lề chế độ ecmascript như chế độ python theo khía cạnh này?

Trả lời

18

Kể từ ecmascript-mode được dựa trên cc-mode, bạn có thể sử dụng c-set-offset cho phép bạn tùy chỉnh bất kỳ biểu tượng cú pháp bù đắp với giá trị thích hợp.

Trong trường hợp của bạn, đi đến điểm được thụt vào trong mức độ sai, nhấn C-c C-o (hoặc gõ M-x c-set-offset), chấp nhận các biểu tượng gợi ý (arglist-intro), và đặt cho nó một giá trị mới (ví dụ +, mặc định bù đắp) .

Bạn cũng có thể làm điều đó theo chương trình trong dotemacs của bạn, ví dụ, với:

(add-hook 'ecmascript-mode-hook 
      (lambda() 
      (c-set-offset 'arglist-intro '+) 
      (c-set-offset 'arglist-close 0))) 
+0

Cảm ơn! Móc này hoạt động hoàn hảo và không yêu cầu tôi gây rối với bất kỳ chế độ nào khác. Ngoài ra tôi không biết về C-c C-o, đó là tiện dụng. – lacker

+0

làm thế nào điều này có thể được thêm vào như một modeline ở phần cuối của tập tin? như ở đây http://stackoverflow.com/questions/5382475/emacs-modeline-at-the-end-of-file-in-one-line – alfC

3

chế độ ecmascript dường như dựa trên cc-mode. Nếu bạn đặt kiểu thụt lề cho cc-mode, , nó cũng sẽ hoạt động cho chế độ ecmascript. Tôi có mã sau đây trong số .emacs. Khi tôi sử dụng ECMAScript-mode nó indents như mong muốn:

;;{{{ c/c++ indent style variables 

(require 'cc-mode) 

(defconst my-c-style 
    '(
    (c-electric-pound-behavior  . 'alignleft) 
    (c-tab-always-indent   . t) 
    (c-hanging-braces-alist  . ((block-open) 
             (brace-list-open) 
             (substatement-open) 
             (defun-open before after) 
             (defun-close before after) 
            )) 
    (c-hanging-colons-alist  . ((member-init-intro before) 
             (inher-intro) 
             (case-label) 
             (access-label  after) 
             (label    after) 
             (access-key  after))) 
    (c-cleanup-list    . (scope-operator 
             empty-defun-braces 
             defun-close-semi)) 
    (c-offsets-alist    . ((arglist-close  . c-lineup-arglist) 
             (case-label   . 4) 
             (statement-case-intro . 4) 
             (access-label   . -4) 
             (label    . -) 
             (substatement-open . 0) 
             (block-open   . 0) 
             (knr-argdecl-intro . -))) 
    ) 
    "My C++/C Programming Style") 


; Customizations for both c-mode and c++-mode 
(defun my-c-mode-common-hook() 
    ; set up for my perferred indentation style, but only do it once 
    (c-add-style "My" my-c-style 'set-this-style) 
    ; we like auto-newline and hungry-delete 
    (c-toggle-auto-hungry-state 1) 
    ; keybindings for both C and C++. We can put these in c-mode-map 
    ; because c++-mode-map inherits it 
    (define-key c-mode-map "\C-m" 'newline-and-indent) 
    ; insert 8 tabs 
    (setq tab-width 8) 
) 

;;}}} 
+2

Sẽ thật tuyệt nếu bạn di chuyển đủ các phần và tập trung vào các tùy chỉnh thụt đầu dòng. –

0

Cảm ơn bạn Török Gábor, trong trường hợp của tôi, tôi ưa thích để thiết lập

(add-hook 'XXX-mode-hook 
     (lambda() 
       (c-set-offset 'arglist-cont-nonempty '+))) 

tôi đang tìm kiếm một cái gì đó như thế này:

veryLongFunctionName (bar, bar, bar)

Đối với một mor e danh sách đầy đủ các biến: read emacs documentation

+0

Vui lòng kiểm tra [URL] này (http://stackoverflow.com/help) sẽ hữu ích khi nâng chất lượng nội dung của bạn lên –

+0

Tôi thực sự không hiểu ý của bạn là gì. URL trỏ tới trang trợ giúp nhưng không có bất kỳ độ chính xác nào: tôi nên kiểm tra điều gì ở đó? Có gì sai trong bình luận của tôi? – Meinew

Các vấn đề liên quan