How to control indentation after an open parenthesis in Emacs

前端 未结 3 2000
孤城傲影
孤城傲影 2020-12-25 13:36

When I use emacs python-mode, if the last character of a line is an open parenthesis it indents the next line just one step in from the indentation of the previous line.

相关标签:
3条回答
  • 2020-12-25 14:14

    Since ecmascript-mode is based on cc-mode, you can use c-set-offset which allows you to customize any syntactic symbol's offset with the preferred value.

    In your case, go to the point which is indented in the wrong level, hit C-c C-o (or type M-x c-set-offset), accept the suggested symbol (arglist-intro), and set it a new value (e.g. +, the default offset).

    You can also do it programmatically in your dotemacs, for instance, with:

    (add-hook 'ecmascript-mode-hook
              (lambda ()
                (c-set-offset 'arglist-intro '+)
                (c-set-offset 'arglist-close 0)))
    
    0 讨论(0)
  • 2020-12-25 14:22

    ecmascript-mode seems to be based on cc-mode. If you set the indentation style for cc-mode, it will also work for ecmascript-mode. I have the following code in my .emacs. When I use ecmascript-mode it indents as desired:

    ;;{{{ 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)
     )
    
    ;;}}}
    
    0 讨论(0)
  • 2020-12-25 14:33

    Thank you Török Gábor, in my case I prefered to set

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

    I was looking for something like this :

    veryLongFunctionName (bar, bar, bar)

    For a more exhaustive list of variables : read emacs documentation

    0 讨论(0)
提交回复
热议问题