如何为Google Java Style设置emacs

3
我很惊讶,但是在搜索后,我找不到一个可以用来使emacs遵循Google Java Style的配置。
如果已经有这样的配置可用,我会很感激提供链接。
否则,我该如何创建这样的配置?
更新:
我想学习的最基本的东西是:我设置哪些自定义变量才能获得块缩进为2个空格续行缩进为4个空格

好问题。不仅仅是谷歌的Java风格,而是一般最流行的Java风格。Emacs默认使用它的java-style,我认为这相当不典型(并且它没有其他可供选择的风格,开箱即用)。 - Drew
3个回答

2
https://github.com/google/styleguide/blob/gh-pages/google-c-style.el 放在你的加载路径中,例如在 ~/.emacs.d/ 中。
然后,在你的Emacs初始化文件中添加:
;; Also works for Java.
(autoload 'google-set-c-style "google-c-style")
(autoload 'google-make-newline-indent "google-c-style")
(add-hook 'c-mode-common-hook 'google-set-c-style)
(add-hook 'c-mode-common-hook 'google-make-newline-indent)

0

你可以定义自己的风格并使用"c-set-style"应用它。下面是我如何定义和设置自己的C风格。为Java定义风格也是一样的。请注意,Java在某种程度上被视为C的“子模式”,因此所有变量和函数都以"c-"开头。

;;; c mode configuration
(defconst lgfang-c-style
  '((c-tab-always-indent        . t)
    (c-basic-offset . 4)
    (c-ignore-auto-fill . nil)
    (c-comment-only-line-offset . (0 . 0))
    (c-hanging-braces-alist     . ((substatement-open after before)
                                   (brace-list-open)))
    (c-hanging-colons-alist     . ((member-init-intro before)
                                   (inher-intro)
                                   (case-label after)
                                   (label after)
                                   (access-label after)))
    (c-cleanup-list             . (scope-operator
                                   empty-defun-braces
                                   defun-close-semi))
    (c-offsets-alist . ((knr-argdecl-intro . 5)
                        (arglist-intro . +)
                        (arglist-close . c-lineup-close-paren)
                        (inclass . +)
                        (member-init-intro . +)
                        (statement-block-intro . +)
                        (defun-block-intro . +)
                        (substatement-open . 0)
                        (label . 0)
                        (statement-case-open . +)
                        (statement-case-intro . +)
                        (case-label . 0)
                        (statement-cont . c-lineup-math)
                        (inline-open . 0)
                        (brace-list-open . +)
                        (topmost-intro-cont . 0)
                        (c . 1) ; "c" for continue of comment, not "c
                                ; programming language"
                        ))
    (c-special-indent-hook . c-gnu-impose-minimum)
    (c-block-comment-prefix . "lgf: ")
    (c-comment-prefix-regexp . ((awk-mode . "#+(lgf: )?")
                                (other ."lgf: \\|//+\\|\\**")))
    ;; go to this file and test if c block comments works
    ;; [[file:./patches/comments-test.c]]
    (c-echo-syntactic-information-p . t))
  "lgfang's C Programming Style")
(c-add-style "lgfang" lgfang-c-style nil)

(add-hook 'c-mode-common-hook
          (lambda ()
            (c-set-style "lgfang")
            (c-toggle-hungry-state 1)
            (hs-minor-mode 1)
            (turn-on-cwarn-mode)
            ;; (eldoc-mode 1)
            ))

谢谢 - 这差不多是我想要的。为了实现以下效果,我需要设置哪些变量:在一个块中换行时使用2个空格,而将长行拆分成两行时使用4个空格?(请参阅我对原问题的更新)。 - haroldcarr
请参考Emacs手册(info“(ccmode)Styles”)获取详细信息。我想给你一个提示:打开一个Java文件,在你想要改变缩进的地方,按下"tab"键,然后查看迷你缓冲区显示的内容。 - Lungang Fang
那个提示真的很有帮助! - haroldcarr

-1

如果你下载https://github.com/google/styleguide/blob/gh-pages/google-c-style.el(如mernst建议的那样),你可以将样式直接放入你的项目中,并通过.dir-locals.el文件启用它。

  1. 下载该文件并将其放入${project}/emacs/google-c-style.el
  2. 创建一个文件${project}/.dir-locals.el,并将以下内容放入其中:
((java-mode . ((eval . (progn
                        (add-to-list 'load-path (concat (vc-root-dir) "emacs"))
                        (require 'google-c-style)
                        (google-set-c-style)
                        (google-make-newline-indent))))))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接