Emacs 不会自动为我缩进行。例如:
int main() {
int a;
int b; // this line still don't indent with int a
}
那么,如何在 Emacs 中缩进一行?而且,每次我键入{
时,如何让 Emacs 像其他 IDE(eclipse、netbean ...)一样自动缩进一个选项卡?
Emacs 不会自动为我缩进行。例如:
int main() {
int a;
int b; // this line still don't indent with int a
}
那么,如何在 Emacs 中缩进一行?而且,每次我键入{
时,如何让 Emacs 像其他 IDE(eclipse、netbean ...)一样自动缩进一个选项卡?
如果您只想自动缩进 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-mode
and ——它们基本上会在一些字符之后触发换行符或缩进,比如and 。electric-layout-mode
;
{
Emacs 的正常行为是保留RET( Enter) 键以按字面意思插入回车,而它使用C-j( Ctrl+ J) 进行输入和缩进。这也是因为一系列其他键可能导致行重新缩进。按照传统,导致重新缩进的命令以“电”作为其名称的一部分。c-mode
有一堆“电动”命令。要找到它们,在编辑 C 源代码时,您可以执行以下操作:
C-h b( Ctrl+ H B) - 列出缓冲区中的所有键绑定。
M-s o(AltPC 或OptionMac + S O)- 调用occur
命令,或者,您可以M-xoccur
。
occur
(在上一步之后,该点将在 minibuffer 中,因此继续输入)。它将打开一个额外的缓冲区,其内容类似于:
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
这列出了所有命令和分配给它们的键,它们执行一些“电动”动作。您可以将点移动到它们中的任何一个,然后按C-h 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。您可以使用C-b和模式C-f在*Help*
您已经访问过的页面之间来回导航(或将点移至[back]
或[forward]
按钮并按RET)。