我在 GNU/Linux Debian 机器上使用 GNU/Emacs HEAD 和附带的 cc 模式(c 版本 5.32.2)。
我正在尝试定义自定义样式来管理 Code Conventions for the Java Programming Language , Android's Code Style Guidelines for Contributors和一些自定义规则。
作为 lisp 初学者,从头开始似乎并不明智。因此,我使用了 google-c-style作为起点,我设法获得了大多数缩进规则的预期行为,嵌套条件除外(请参见下面的代码片段)。
来自 that post ,我在自定义样式中定义了 (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 个空格(2 次 ++
)缩进而不是 8 个(++
)。
我想得到以下缩进:
if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
&& deviceRegistred.getName().equalsIgnoreCase(deviceName))) {
doSomethingAboutIt();
}
我试图定义一个 (,(when (fboundp …)))
条件,就像用于 statement-cont
的条件一样,但没有成功(我缺乏 lisp 知识也不帮忙)。
现在,问题是:我的方法是对还是错?我如何/应该如何实现预期的行为(即检测我何时处于嵌套条件以获得正确的缩进)?
(我不想使用 malabar-mode 或 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 编码风格和 Emacs cc-mode 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8377140/