我正在使用包含cc-mode(c版本5.32.2)的GNU/Emacs HEAD在GNU/Linux Debian机器上。我试图定义一个自定义样式来管理Java编程语言的代码约定,Android贡献者的代码风格指南和一些自定义规则。作为一个Lisp初学者,从头开始似乎不明智。因此,我使用google-c-style作为起点,并设法获得大多数缩进规则的预期行为,但嵌套条件除外(请参见下面的代码片段)。根据该帖子,我在我的自定义样式中定义了
(arglist-cont-nonempty . ++)
(完整代码:custom-java-style.el)。不幸的是,尽管大多数情况下都按预期缩进: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个空格(++
出现了两次)缩进,而不是8个(++
)。
我想要以下缩进:
if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
&& deviceRegistred.getName().equalsIgnoreCase(deviceName))) {
doSomethingAboutIt();
}
我试图定义一个类似于statement-cont
使用的{{(,(当(fboundp …)))}}条件,但没有成功(我的Lisp知识不足也没有帮助)。现在的问题是:我的方法正确还是错误?我应该如何实现预期的行为(即检测我是否处于嵌套条件中以获取正确的缩进)?(我不想使用malabar-mode或JDEE,所以请不要告诉我使用它们。)
祝好,
Renaud
更新2011/12/06(回应评论)
我们不会在这里开始一场圣战。那些出于自己的原因想使用Emacs的人可以坚持使用Emacs,其他人可以随心所欲...
话虽如此,我在一个团队中工作,在那里我是唯一使用Emacs的人,其他人喜欢Eclipse。由于我负责编码规则,我与同事合作获得了正确的保存操作并帮助配置了Eclipse的格式化程序。我能说的是:Eclipse的保存操作和格式化程序都不容易配置... 主要区别在于你有一个漂亮的GUI和漂亮的复选框,但这并没有多大帮助来减少复杂性。
我坚持使用Emacs...