我在GNU / Linux Debian机器上使用GNU / Emacs HEAD和附带的cc-mode(c-version 5.32.2)。
我正在尝试定义自定义样式来管理Code Conventions for the Java Programming Language,Android's Code Style Guidelines for Contributors和一些自定义规则。
作为一名初学者,从头开始似乎并不明智。因此,我使用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 报告Syntactic analysis: ((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 ......
答案 0 :(得分:3)
我会说,Emacs做对了。 考虑这种情况:
if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
&& deviceRegistred.getName().equalsIgnoreCase(deviceName))
|| otherCondition) {
doSomethingAboutIt();
}
如果嵌套条件缩进了8个字符,那将是一个令人困惑的变体:
if (!(deviceRegistred.getAddress().equalsIgnoreCase(deviceAdress)
&& deviceRegistred.getName().equalsIgnoreCase(deviceName))
|| otherCondition) {
doSomethingAboutIt();
}