2011-01-12 88 views
4

Emacs默认不会缩进预处理器代码。我知道它的历史根源现在已经过时了。将预处理器指令缩进为emacs中的C代码

但是,使用大量#ifdef缩进代码很难阅读。

所以我想提出emacs的自动缩进给我这样的事情:

void myfunc() { 
    int foo; 

    #ifdef BAR 
    printf(foo); 
    #endif 

    return foo; 
} 

取而代之的是我现在得到:

void myfunc() { 
    int foo; 

#ifdef BAR 
    printf(foo); 
#endif 

    return foo; 
} 

你emacs的黑客这个问题的任何线索:) ?

+3

假装预处理宏块具有范围是一个严重的错误。它需要几十个失踪的脚才能自己发现。 – 2011-01-12 15:31:44

+0

+1 to @Hans。第二种形式实际上更加清晰的海事组织。由于您实际上正在修改文件的内容,因此在文件“范围”级别缩进(即根本不缩进)似乎更为明智。我不确定讨论关于预处理器指令的范围有多有效。 – JeremyP 2011-01-12 17:03:20

回答

12

您可以简单地告诉Emacs向预处理器行添加偏移量。

  • 将光标(point)在处理器中预线
  • 然后按抄送钴(控制-C控制-O)
  • 迷你缓冲区应该说Syntactic symbol to change:
  • 类型cpp-macro,按输入
  • 输入新的偏移量(编号 - 通常为0

然后一个TAB在每个预处理器行上应该正确缩进。 (或M-xindent-region ...)。

要永久更改设置,您可以在.emacs文件中添加所需的行。
复制先前输入的命令的一种简单方法是c-ESC ESC ESC并使用箭头键查找(c-set-offset ...) Elisp命令。

这应该是

(c-set-offset (quote cpp-macro) 0 nil)