4

适用于 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,然后,从代码中的某个点开始,所有之后的缩进都变得混乱。每一行的句法符号都是对的,但是锚的位置都错了,好像不能识别同级的{,而是锚定在上一级前面的某个{。

更奇怪的是,即使我再次删除了那些预处理器宏,缩进也不会再次恢复。
更奇怪的是,有时后来,它无缘无故地恢复了。我不知道是什么操作触发了这个,但我认为最有可能的是“保存”“恢复缓冲区”等。

希望有人能找出原因,在此先感谢。

4

1 回答 1

1

这很可能与“bug #14133 24.2;c 函数识别在某些预处理器宏上中断”有关:

http://lists.gnu.org/archive/html/bug-gnu-emacs/2013-04/msg00055.html

问题似乎与# 前面的空格有关。我注意到这一点的方式是 CMa 和 CMe 停止正常工作,并且自动缩进区域很奇怪,就像你的情况一样。

恢复对我来说也不一致。

Alan Mackenzie 提出的补丁解决了我的问题,你应该试试。

您也可以尝试使用 emacs 23,我无法重现此版本中的错误。

于 2013-04-12T11:10:05.613 回答