如何像普通IDE一样缩进行

时间:2012-12-22 06:18:20

标签: emacs

Emacs不会自动缩进行。例如:

int main() {
   int a;
int b; // this line still don't indent with int a
}

那么,如何在Emacs中缩进行?而且,每次输入{时,如何让Emacs像其他IDE一样自动缩进标签(eclipse,netbean ......)?

2 个答案:

答案 0 :(得分:2)

如果您只想自动添加C代码,请将其放在.emacs文件中:

(defun enable-newline-and-indent ()
  (local-set-key (kbd "RET") 'newline-and-indent))
(add-hook 'c-mode 'enable-newline-and-indent)

或者,您可以为所有这样的编程模式启用此行为(它仅适用于Emacs 24 +):

(defun enable-newline-and-indent ()
  (local-set-key (kbd "RET") 'newline-and-indent))
(add-hook 'prog-mode 'enable-newline-and-indent)

另一种选择是使用Emacs 24中引入的electric-indent-modeelectric-layout-mode - 它们基本上会在;{等字符后触发换行或缩进

答案 1 :(得分:2)

Emacs正常行为是保留 RET Enter )键以便按字面插入回车符,而它使用 Cj Ctrl + J )用于输入和缩进。这也是因为一系列其他键可以导致行重新缩进。按照传统,导致重新缩进的命令具有“电”作为其名称的一部分。 c-mode有一堆“电”命令。要查找它们,在编辑C源时,您可以执行以下操作:

  • Ch b Ctrl + H B ) - 列出缓冲区中的所有键绑定

  • Ms o Alt PC或 Option Mac + S O ) - 调用occur命令,或者,您可以 Mx occur

  • occur提示您输入时键入“electric”(在上一步之后,该点将位于迷你缓冲区中,因此只需继续输入)。

它将打开一个额外的缓冲区,内容与此类似:

12 matches for "electric" in buffer: *Help*
    706:C-d             c-electric-delete-forward
    709:#               c-electric-pound
    710:( .. )          c-electric-paren
    711:*               c-electric-star
    712:,               c-electric-semi&comma
    713:/               c-electric-slash
    714::               c-electric-colon
    715:;               c-electric-semi&comma
    716:{               c-electric-brace
    717:}               c-electric-brace
    718:DEL             c-electric-backspace
    726:C-c C-l         c-toggle-electric-state

列出了所有命令和分配给它们的键,它们执行一些“电动”操作。您可以将点移动到任何一个并按 Ch f Ctrl + H F RET 它将打开帮助页面,描述命令的作用。例如,如果您在c-electric-colon上请求帮助,它会向您显示:

c-electric-colon is an interactive compiled Lisp function in
`cc-cmds.el'.

(c-electric-colon ARG)

Insert a colon.

If `c-electric-flag' is non-nil, the colon is not inside a literal and a
numeric ARG hasn't been supplied, the command performs several electric
actions:

(a) If the auto-newline feature is turned on (indicated by "/la" on
the mode line) newlines are inserted before and after the colon based on
the settings in `c-hanging-colons-alist'.

(b) Any auto-newlines are indented.  The original line is also
reindented unless `c-syntactic-indentation' is nil.

(c) If auto-newline is turned on, whitespace between two colons will be
"cleaned up" leaving a scope operator, if this action is set in
`c-cleanup-list'.

[back]

您可以通过将点移动到看起来像超链接的项目(通常是带下划线,或者具有不同的视觉外观,然后是文本的其余部分),并点击 RET <继续阅读本手册。 / KBD>。您可以在*Help*模式下使用 Cb Cf 在您已访问的页面之间前后导航(或将点移动到{{1 }或[back]按钮,然后按 RET )。