将预处理程序指令缩进为emacs中的C代码

默认情况下,Emacs不会缩进预处理器代码。 我知道它的历史根源已经过时了。

但是,拥有大量#ifdef unindented的代码很难阅读。

所以我想让emacs自动缩进给我这样的东西:

void myfunc() { int foo; #ifdef BAR printf(foo); #endif return foo; } 

而不是我现在得到的:

 void myfunc() { int foo; #ifdef BAR printf(foo); #endif return foo; } 

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

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

  • 将光标( point )放在预处理器行中
  • 然后按Cc Co (control-c control-o)
  • 迷你缓冲区应该说Syntactic symbol to change:
  • 键入cpp-macro ,按Enter键
  • 输入新的偏移量(数字 – 通常为0

然后每个预处理器行上的TAB应正确缩进。 (或Mx indent-region ……)。

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

那应该是

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