2009-09-25 8 views
19

Cuando uso emacs python-mode, si el último carácter de una línea es un paréntesis abierto, sangra la siguiente línea a solo un paso de la sangría de la línea anterior.Cómo controlar la sangría después de un paréntesis abierto en Emacs

call_some_function(
    some_very_long_argument_that_I_want_to_put_on_its_own_line) 

Me gusta eso. Ahora en modo ecmascript (que estoy usando para actionscript 3), siempre se sangra al nivel del paréntesis anterior.

call_some_function(
        this_is_not_really_saving_me_any_horizontal_space); 

¿Cómo puedo hacer la sangría del modo ecmascript como modo python en este sentido?

Respuesta

18

Desde ecmascript-mode se basa en cc-modo, puede utilizar c-set-offset que le permite personalizar cualquier símbolo sintáctico ha compensado con el valor preferido.

En su caso, ir al punto que se sangría en el nivel equivocado, golpeó C-c C-o (o escriba M-x c-set-offset), acepte el símbolo sugerido (arglist-intro), y establecer un nuevo valor (por ejemplo +, el valor predeterminado offset) .

También puede hacerlo mediante programación en sus dotemacs, por ejemplo, con:

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

¡Gracias! Este gancho funciona perfectamente y no me obliga a meterme con ningún otro modo. Además, no sabía sobre C-c C-o, eso es útil. – lacker

+0

¿cómo se puede agregar esto como una línea de modo al final del archivo? como aquí http://stackoverflow.com/questions/5382475/emacs-modeline-at-the-end-of-file-in-one-line – alfC

3

ecmascript modo parece basarse en cc modo. Si se establece el estilo de sangría para cc modo, también funcionará para ecmascript modo. Tengo el siguiente código en mi .emacs. Cuando uso ecmascript modo que sangra como desee:

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

Será bueno si se mudan las piezas suficientes, y se centran en las personalizaciones de sangría. –

0

Gracias Török Gábor, en mi caso he preferido para establecer

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

que estaba buscando algo de esta manera:

veryLongFunctionName (bar, bar, bar)

Para una mor e lista exhaustiva de variables: read emacs documentation

+0

Compruebe esta [URL] (http://stackoverflow.com/help) será útil para elevar la calidad de su contenido hasta –

+0

Realmente no entiendo cuál es su significado. La URL apunta a la página de ayuda, pero sin ninguna precisión: ¿qué debo verificar allí? ¿Qué estuvo mal en mi comentario? – Meinew

Cuestiones relacionadas