emacs - emacs 中 Groovy 风格方法参数的缩进

标签 emacs groovy elisp

我正在使用 emacs 和 groovy electric 模式(按照 here 概述安装)。我的 .emacs 文件的相关部分(我认为)在这个问题的末尾给出。

当我输入时,我通过缩进得到的当前行为是:

def someObject = new Something(
    param1

此时一切都是我想要的,但是一旦我输入“:”字符,它就会变成:

def someObject = new Something(
param1:

我希望参数/值对(以及后面的任何参数/值对)像以前一样保持缩进一级,例如:

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)))

这两者都没有达到我想要的效果。这是正确的位置吗?

最佳答案

Groovy 模式将这些类型的参数视为标签,例如 case 语句标签以及从 Java 继承的很少使用的功能,该功能允许 break 语句指定目标。

您可以通过将其添加到 Hook 来覆盖缩进:

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

关于emacs - emacs 中 Groovy 风格方法参数的缩进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17822969/

相关文章:

带有 gdb 的 Emacs 23.1.1 - 强制源窗口

emacs - 如何在emacs nrepl session 中自动获得paredit?

xml - Groovy:如何在使用 XMLSlurper() 读取的 XML 元素列表的开头插入节点

groovy - Groovy 如何在 GString 中将 char[] 转换为 String?

python - Emacs Jedi python 工具无法加载 "error searching for program: permission denied, python"?

emacs - 如何制作一个让段落中的每个句子占一行的函数?

grails - 如何解析、持久化和检索带有以空格分隔的标签的字符串?

emacs - 用于编辑 Emacs Lisp 代码的大纲或折叠模式

emacs - elisp ,将函数作为参数传递并调用它,发生 Eval 错误,为什么?

Emacs shell命令与tramp模式等效