切换语句后的Emacs缩进缩进

时间:2009-06-05 18:19:19

标签: c emacs elisp indentation

现在,标准的emacs缩进的工作原理如下:


switch (cond) {
case 0: {
  command;
}
  break;
}

我想休息一下;与案件排列。

此外,某处是否有c-set-offset命令列表?

2 个答案:

答案 0 :(得分:22)

自定义缩进的最大帮助(我发现)是弄清楚cc模式用于缩进当前行的内容。这就是 Cc Co aka Mx c-set-offset 可以做到的 - 它允许你自定义语法元素的偏移量,它会显示你使用了什么元素对于当前的行!

以下是如何自定义它。将光标移动到break;行。

C-c C-o RET 0 RET

此时,您的代码将缩进为:

switch (cond) {
case 0: {
  command;
}
break;
}

有关偏移的文档,请查看变量'c-offsets-alist

的docstring
C-h v c-offsets-alist RET

同样,您可以将其添加到.emacs:

(setq c-offsets-alist '((statement-case-intro . 0)))

自定义缩进的文档是here,值得一读。有很多方法可以做到这一点,因此阅读手册是值得的(如果你想要非默认缩进)。这里是指向cc模式中使用的所有syntactic symbols的指针。

答案 1 :(得分:0)

对我来说,让php模式switch语句正确缩进需要:

      (c-set-offset (quote brace-list-entry) 2 nil)
      (c-set-offset (quote case-label) 2 nil)

但正如其他人所说,C-c C-o是你的朋友......