Java编码风格&;Emacs cc模式配置

Java编码风格&;Emacs cc模式配置,java,emacs,elisp,dot-emacs,cc-mode,Java,Emacs,Elisp,Dot Emacs,Cc Mode,我在GNU/LinuxDebian机器上使用GNU/EmacsHead和附带的cc模式(c-Version5.32.2) 我试图定义一个自定义样式来管理,以及一些自定义规则 作为lisp初学者,从头开始似乎并不明智。因此,我将其作为一个起点,并成功地获得了大多数缩进规则的预期行为,但嵌套条件除外(请参见下面的代码片段) 从中,我以自定义样式(完整代码:)定义了(arglist cont nonempty.++)。不幸的是,尽管大多数情况下按预期缩进: if ((condition1 &&

我在GNU/LinuxDebian机器上使用GNU/EmacsHead和附带的cc模式(c-Version5.32.2)

我试图定义一个自定义样式来管理,以及一些自定义规则

作为lisp初学者,从头开始似乎并不明智。因此,我将其作为一个起点,并成功地获得了大多数缩进规则的预期行为,但嵌套条件除外(请参见下面的代码片段)

从中,我以自定义样式(完整代码:)定义了
(arglist cont nonempty.++)
。不幸的是,尽管大多数情况下按预期缩进:

if ((condition1 && condition2)
        || (condition3 && condition4)
        ||!(condition5 && condition6)) {
    doSomethingAboutIt();

    someMethod(longExpression1, longExpression2, longExpression3,
            longExpression4, longExpression5);
}
嵌套条件缩进错误:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
                && deviceRegistred.getName().equalsIgnoreCase(deviceName))) {
    doSomethingAboutIt();
}
Ctrl-c Ctrl+s报告
语法分析:((arglist cont nonempty 2447 2450)(arglist cont nonempty 2447 2452))
在第二行,我显然有16个空格(2倍
++
)缩进,而不是8(
++

我想得到以下缩进:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
        && deviceRegistred.getName().equalsIgnoreCase(deviceName))) {
    doSomethingAboutIt();
}
我试图定义一个
(,(when(fboundp…))
条件,就像用于
语句cont
的条件一样,但没有成功(我缺乏lisp知识也没有帮助)

现在的问题是:我的方法是对的还是错的?我应该如何实现预期的行为(即,检测何时处于嵌套状态以获得正确的缩进)

(我不想使用malabar模式或JDEE,所以请不要告诉我使用它们。)

干杯

雷诺

更新2011/12/06(回应评论)

我们不会在这里发动圣战。那些想使用Emacs的人,出于他们自己的原因,可以坚持使用Emacs,其他人可以随心所欲

也就是说,我在一个团队中工作,在这个团队中,我是唯一一个使用Emacs的人,其他人都喜欢Eclipse。因为我负责编码规则,所以我与同事一起获得正确的保存操作,并帮助配置Eclipse的格式化程序。我所能说的是:Eclipse保存操作和格式化程序根本不容易配置……主要区别在于,您有一个带有漂亮复选框的漂亮GUI,但对于降低复杂性没有多大帮助


我坚持使用Emacs…

我得说,Emacs做的事情是正确的。 考虑这种情况:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
                && deviceRegistred.getName().equalsIgnoreCase(deviceName))
        || otherCondition) {
    doSomethingAboutIt();
}
如果嵌套条件缩进8个字符,这将是一个令人困惑的变量:

if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
        && deviceRegistred.getName().equalsIgnoreCase(deviceName))
        || otherCondition) {
    doSomethingAboutIt();
}

我将使用专门设计用于开发、调试和测试Java应用程序的IDE。它不像emacs那样通用,但可能更好地支持Java特定的功能。@PeterLawrey这里的问题不是我是否应该/将会/能够使用Eclipse或另一个支持Java的完整IDE,而是如何在emacs中解决一个非常具体的缩进问题……无论如何,感谢您的评论!当然是评论,而不是对你问题的回答@PeterLawrey Emacs几十年来一直允许在C中进行自定义缩进,并且考虑到Java和C对于
if
condition的语法完全相同(这是问题所在,对吧?),我不认为其他IDE在这里应该做得更好。@Antoine,Java IDE没有帮助,但好的lisp IDE可能会有帮助。