如何让Emacs自动缩进我的C代码?

时间:2009-05-05 07:27:40

标签: emacs

我刚刚开始感受到emacs,但是当我按下返回键时,我很沮丧。我知道如果我按下C-j就会这样做,但我不能养成这种习惯。我不能。我需要回击,我讨厌每次重新选择。

我进入选项并发现C模式钩子和C ++模式钩子等 - 他们定义了两个键映射(10和13,我记得0A和0D是CR / LF因为我在它们中使用了很多程序) - 我想,因为一个人说“(lambda nil (define-key lisp-mode-map [13] (quote newline-and-indent))”而另一个人说的是(quote newline)而不是{{1}},我只是把 - 并且缩进放在它的末尾并且认为它会起作用。< / p>

但事实并非如此:我设置并保存,尝试,但无济于事。重启emacs,仍然没有成功。如何缩进我的代码呢?令人非常疯狂的是,emacs需要一个lisp学位才能根据你的基本需求进行配置。

另外,作为一个侧面问题:我如何复制并粘贴剪贴板? Killing / yanking很方便,但我讨厌每次都想要编辑 - >复制粘贴到其他地方。

- 编辑 -

好的,我将以下几行放入我的.emacs中并且有效:

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

感谢您的帮助

7 个答案:

答案 0 :(得分:19)

我将返回键设置为全局充当我的~/.emacs文件中的新行和意图:

(global-set-key "\C-m" 'newline-and-indent)

适合我。

答案 1 :(得分:15)

查看emacswiki - autoindent

正如那里建议的那样,将以下代码放在你的.emacs

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

您可以自定义变量C Default Styl。在您的emacs中,转到选项 - &gt;自定义Emacs-&gt;特定选项,然后键入c-default-style并设置为您的选择。通过这样做,您不需要点击TAB。从行的开头键入,然后点击“;” ,它会自动缩进。

希望这有帮助

答案 2 :(得分:6)

除了其他建议之外,请尝试C-c C-a切换自动换行功能,以便您的模式行显示C/la。那你甚至不需要在大部分时间按Enter键;相反,当您键入分号或大括号时,会插入换行符并使您的代码缩进。有时您需要按Enter键,并且您没有获得自动注释(除非您按照另一个答案的建议重新绑定RET)但是如果您只是开始键入下一行,您可能会注意到它正确缩进当你输入一些标点字符时。

要开始使用“Lisp学位”,请为信息浏览器键入C-h i,然后转到“CC模式”节点(它与Emacs的节点分开;键入d目录并在那里找到CC模式。)

答案 3 :(得分:6)

如果要缩进整个c / c ++文件,只需执行

  1. 标记所有内容:CTRL-x h
  2. 按TAB
  3. 那,btw,也适用于xml,python代码和其他类型。

答案 4 :(得分:1)

尝试[enter],(kbd“enter”)或(read-kbd-macro“enter”),他们都做了微妙的不同的事情;)

另外,对我来说,复制/粘贴只是有效。你可以尝试运行emacs -q,看它是否有效?如果是这样,那么.emacs可能会出现问题。

我也有:

(when window-system
  ;; use extended compound-text coding for X clipboard
  (set-selection-coding-system 'compound-text-with-extensions))

但这可能会做其他事情;)

答案 5 :(得分:0)

复制:移动开始,CTRL空间,移动到结束,ALT-W

粘贴:CTRL-y

on unix:鼠标左键复制,右键鼠标粘贴

答案 6 :(得分:0)

这样做的简单方法是使用electric-indent-mode。如果您想手动启用它,只需执行

M-x electric-indent-mode

要自动启用它,请在.emacs中说明以下内容:

(electric-indent-mode)

这将是Emacs 24.4中的默认设置。