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

时间:2011-01-12 13:18:16

标签: c emacs coding-style indentation

默认情况下,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;
}

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

1 个答案:

答案 0 :(得分:12)

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

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

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

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

那应该是

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