【问题标题】:Change java-mode's indentation style in emacs在 emacs 中更改 java-mode 的缩进样式
【发布时间】:2013-09-17 01:11:31
【问题描述】:

我的 emacs 将 c-default-style 配置为“linux”,将 c-basic-offset 配置为 4,我对此非常满意,并且在使用 C 和 PHP 时就像是一种魅力。问题是,当我尝试编辑一些 java 代码时,它的缩进如下:

class Main
{
    public static void main(String args[])
        {
            System.out.println("Hello world!");
        }
}

这显然是 Emacs 的默认缩进行为,而不是我为 CC 模式设置的行为(困扰我的是 main 函数大括号的缩进)。我几个月前才开始使用 Emacs,我对 Emacs Lisp 不太满意,但真的不知道为什么 java-mode 没有采用 cc-mode 的缩进样式。有人对此有任何线索吗?当然,禁用 indent-tabs-mode 是一种解决方案,但我不得不说我觉得它并不令人满意。我感觉这个问题确实有一个简单的解决方案,但我一直在寻找几个小时......

【问题讨论】:

    标签: java emacs indentation


    【解决方案1】:

    这对我有用:

    (require 'google-c-style)
    (add-hook 'c-mode-common-hook
          (lambda()
                (subword-mode)
                (google-set-c-style)
                (google-make-newline-indent)
                (setq c-basic-offset 4)))
    

    您需要下载 https://github.com/google/styleguide/blob/gh-pages/google-c-style.el 并将其放在加载路径中的某个位置,例如~/.emacs.d/。

    【讨论】:

    • 谢谢,但在我的例子中,lambda 定义必须以 #'(lambda () ...) 的形式定义。
    【解决方案2】:

    在here 中简要描述了设置“c 样式”(用于缩进类 C 语言的规则)。特别是,您可以使用类似这样的方式为 java-mode 选择“linux”:

    (setq c-default-style
          '((java-mode . "linux")))
    

    我相信您需要分别为每种模式选择样式。由于某种原因,java-mode 可能没有将 c-default-style 作为字符串使用。

    【讨论】:

    • 那什么也没做...但我确实认为一个不求助于外部配置文件的解决方案——必须有一个简单的方法来做到这一点。但正如你所说,我不明白为什么 java-mode 没有采用 c-default 样式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 2012-10-05
    • 2011-06-06
    • 1970-01-01
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多