2

私はGroovy Electricモードでemacsを使用しています(ここで概説されているようにインストールされています)。私の .emacs ファイルの関連部分 (私が思う) は、この質問の最後に記載されています。

入力時にインデントを使用して取得している現在の動作は次のとおりです。

def someObject = new Something(
    param1

この時点ではすべてが私の希望どおりですが、「:」文字を入力するとすぐに次のようになります。

def someObject = new Something(
param1:

以前のように、パラメーター/値のペア (およびそれに続くもの) を 1 レベルインデントしたままにしておきます。

def someObject = new Something(
    param1: val1,
    param2: val2
)

.emacs抜粋:

(electric-indent-mode t)

(setq-default tab-width 4)
(setq-default indent-tabs-mode nil)
(setq indent-line-function 'insert-tab)
(setq tabify nil)
(setq-default c-basic-offset 4)
(delete-selection-mode 1)
(set-default-font "-apple-Bitstream_Vera_Sans_Mono-medium-normal-normal-*-*-*-*-*-m-0-iso10646-1")
(setq load-path (cons "~/.emacs.d/" load-path))
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/")

(setq whitespace-action '(auto-cleanup)) ;; automatically clean up bad whitespace
(setq whitespace-style '(trailing space-before-tab indentation empty space-after-tab)) ;; only show bad whitespace
;;; delete trailing whitespace
(add-hook 'before-save-hook 'delete-trailing-whitespace)

;;; turn on syntax highlighting
(global-font-lock-mode 1)

;;; use groovy-mode when file ends in .groovy or has #!/bin/groovy at start
(autoload 'groovy-mode "groovy-mode" "Major mode for editing Groovy code." t)
(add-to-list 'auto-mode-alist '("\\.groovy\\'" . groovy-mode))
(add-to-list 'interpreter-mode-alist '("groovy" . groovy-mode))

;;; make Groovy mode electric by default.
(add-hook 'groovy-mode-hook
          (lambda ()
            (require 'groovy-electric)
            (groovy-electric-mode)))

編集: 以下の@ataylorの提案に関して、私は両方を試しました:

(add-hook 'groovy-mode-hook
          '(lambda ()
             (require 'groovy-electric)
             (groovy-electric-mode)))

(add-hook 'groovy-mode-hook '(c-set-offset 'label 4))

(add-hook 'groovy-mode-hook
          '(lambda ()
             (require 'groovy-electric)
             (groovy-electric-mode)
             (c-set-offset 'label 4)))

どちらも私が望むようには機能しません。これは正しい場所ですか?

4

1 に答える 1

3

Groovy モードでは、これらのタイプのパラメーターをラベルとして扱います。たとえば、case ステートメントのラベルや、breakステートメントでターゲットを指定できる Java から継承されたほとんど使用されない機能です。

これをフックに追加することで、インデントをオーバーライドできます。

(add-hook 'groovy-mode-hook
          (lambda ()
            (c-set-offset 'label 4)))
于 2013-07-24T15:13:26.683 に答える