2009-09-25 22 views
19

Quando uso la modalità python di emacs, se l'ultimo carattere di una linea è una parentesi aperta, fa rientrare la riga successiva ad un solo passo dal rientro della riga precedente.Come controllare il rientro dopo una parentesi aperta in Emacs

call_some_function(
    some_very_long_argument_that_I_want_to_put_on_its_own_line) 

Mi piace. Ora in ecmascript-mode (che sto usando per actionscript 3), fa sempre un rientro al livello della parentesi precedente.

call_some_function(
        this_is_not_really_saving_me_any_horizontal_space); 

Come posso fare indent in modo ecmascript come python-mode a questo riguardo?

risposta

18

Da ecmascript-mode si basa su cc-mode, è possibile utilizzare c-set-offset che consente di personalizzare qualsiasi simbolo sintattica è compensato con il valore preferito.

Nel tuo caso, andare al punto che è rientrato nel livello sbagliato, ha colpito C-c C-o (o digitare M-x c-set-offset), accettare il simbolo suggerito (arglist-intro), e impostare un nuovo valore (ad esempio +, compensato l'impostazione predefinita) .

si può anche fare a livello di codice nelle vostre dotemacs, per esempio, con:

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

Grazie! Questo hook funziona perfettamente e non richiede di interferire con altre modalità. Inoltre non sapevo di C-c C-o, è comodo. – lacker

+0

come può essere aggiunto come modeline alla fine del file? come qui http://stackoverflow.com/questions/5382475/emacs-modeline-at-the-end-of-file-in-one-line – alfC

3

ECMAScript modalità sembra essere basata su cc-mode. Se si imposta lo stile di indentazione per cc-mode, , funzionerà anche per ecmascript-mode. Ho il seguente codice nel mio .emacs. Quando uso ECMAScript modalità esso fa rientrare lo desideri:

;;{{{ 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

Sarebbe bello se si spostassero le parti sufficienti e si concentrassero sulle personalizzazioni dell'indentazione. –

0

Grazie Török Gábor, nel mio caso ho preferito impostare

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

ero alla ricerca di qualcosa di in questo modo:

veryLongFunctionName (bar, bar, bar)

Per un mor Elenco completo di variabili: read emacs documentation

+0

Si prega di controllare questo [URL] (http://stackoverflow.com/help) sarà utile per alzare la qualità dei contenuti fino a –

+0

Non capisco davvero cosa significhi. L'URL punta alla pagina di aiuto ma senza precisione: cosa dovrei controllare lì? Cosa c'era di sbagliato nel mio commento? – Meinew

Problemi correlati