适用于Windows的Emacs 24.2。
case TYPE_LONG:
{ <------- 65383
traceCodePath(20);
tempLongVal = iterator_long(it);
tempLongVal = 10;
if (isBigEndian())
{
swap_endian64(&tempLongValCon, &tempLongVal);
traceCodePath(25); <------- 65601
if (i > 0)
{ <------ get weird from here /* ((substatement-open 65601)) */
} <------ this line aligns with the { below "case" /* ((block-close 65383)) */
} <------ the code afterward all align with { below "case" /* ((block-close 65383)) */
c-mode缩进从一开始就运行良好,直到我添加了一些预处理器宏,#ifdef,#else,#end,之后,从代码中的某些点开始,所有后续缩进都变得混乱。 每一行的合成符号都是正确的,但是锚点位置都是错误的,似乎他们无法识别{在同一级别,但是在某些级别{在他们之前停留在上层。
更奇怪的是,即使我再次移除这些预处理器宏,缩进也不会再次恢复。
更奇怪的是,有时甚至更晚,它无缘无故地恢复了。我不知道是什么操作触发了这个,但我认为最有可能是“保存”“恢复缓冲区”等。
希望有人能提出原因,提前谢谢。
答案 0 :(得分:1)
这很可能与“bug#14133 24.2; c函数在某些预处理器宏上的识别中断”有关:
http://lists.gnu.org/archive/html/bug-gnu-emacs/2013-04/msg00055.html
问题似乎是在#之前的空格。我注意到这一点的方式是C-M-a和C-M-e停止正常工作,并且自动缩进区域就像你的情况一样奇怪。
恢复对我来说也不一致。
patch proposed by Alan Mackenzie解决了我的问题,你应该尝试一下。
您也可以尝试使用emacs 23,我无法重现此版本中的错误。