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

如何使Emacs自动缩进我的C代码?,emacs,Emacs,我刚刚开始感觉到emacs,但当我按下return键时,它倾向于不缩进,这让我很沮丧。我知道如果我按C-j键,它会成功的,但我不能养成这个习惯。我就是不能。我需要点击回车键,我讨厌每次都重新点击 我进入了选项,找到了C模式钩子和C++模式钩子等等,他们定义了两个KyMyPress(10和13,我记得0A和0D是CR/LF,因为我在汇编中使用了很多)——我想既然有一个说“(lambda nIL(定义密钥Lisp模式映射[13)(引用新行和缩进))< /C>另一个是相同的,但是使用了(quote n

我刚刚开始感觉到emacs,但当我按下return键时,它倾向于不缩进,这让我很沮丧。我知道如果我按C-j键,它会成功的,但我不能养成这个习惯。我就是不能。我需要点击回车键,我讨厌每次都重新点击

我进入了选项,找到了C模式钩子和C++模式钩子等等,他们定义了两个KyMyPress(10和13,我记得0A和0D是CR/LF,因为我在汇编中使用了很多)——我想既然有一个说“<代码>(lambda nIL(定义密钥Lisp模式映射[13)(引用新行和缩进))< /C>另一个是相同的,但是使用了

(quote newline)
,我只是把-和缩进放在它的末尾,并认为它会起作用

但事实并非如此:我设置并保存了它,尝试了,但没有成功。重新启动emacs,仍然没有成功。我如何使它缩进我的代码?emacs需要lisp学位才能配置它以满足您的基本需求,这太疯狂了

另外,作为一个附带问题:我如何复制到剪贴板并从剪贴板粘贴?杀死/猛拉很方便,但我讨厌每次我想粘贴到其他地方时都去编辑->复制

--编辑--

好的,我在我的.emacs中放了以下几行代码,它成功了:

(add-hook 'c-mode-common-hook (lambda () (local-set-key (kbd "RET") 'newline-and-indent))) (添加钩子'c-模式-公共钩子(λ() (本地设置键(kbd“RET”)'换行和缩进) 感谢您的帮助

请尝试[enter]、(kbd“enter”)或(阅读kbd宏“enter”),它们所做的事情都略有不同;)

而且,对我来说,复制/粘贴也很有效。你能试着运行emacs-q,看看它是否有效吗?如果是这样,则可能是您的.emacs有问题

我还有:

(when window-system
  ;; use extended compound-text coding for X clipboard
  (set-selection-coding-system 'compound-text-with-extensions))
但这可能会起到其他作用;)

看一看

正如这里所建议的,将以下代码放在.emacs中

(defun set-newline-and-indent ()
  (local-set-key (kbd "RET") 'newline-and-indent))
(add-hook 'c-mode-hook 'set-newline-and-indent)
您可以自定义变量C Default Styl。在emacs中,转到选项->自定义emacs->特定选项,然后键入c-default-style并设置为您的选择。通过这样做,您不需要点击TAB。从行首键入,当您点击“;”时,它将自动缩进


希望这有助于复制:移动到开始,按住空格键,移动到结束,按住ALT-W键

粘贴:CTRL-y


在unix上:用鼠标左键复制,用鼠标右键粘贴

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


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

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

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

适合我。

如果要缩进整个c/c++文件,只需缩进即可

  • 标记所有内容:CTRL-x h
  • 按TAB键

  • 顺便说一句,这也适用于xml、python代码和其他类型。

    实现这一点的简单方法是使用
    电子缩进模式。如果您想手动启用它,只需执行以下操作

    M-x electric-indent-mode
    
    要自动启用它,请在
    .emacs
    中说出以下内容:

    (electric-indent-mode)
    

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

    为什么要对“lisp degree”大喊大叫?在emacs中,您必须选择(!)来配置所有内容。考虑到这一点,lisp在当时是一个非常好的决定。emacs发明的时间取决于aera。现代IDE规定,什么可以改变,什么不可以改变,所以人们可能会决定,他的工作方式是什么……为了表达我的沮丧,我夸张地说,我知道emacs是用lisp(或elisp或其他什么)编程的,但我没想到这是一个要求——我想,在窗口模式下,可能有一个前端用于一些更简单的设置。当你点击回车键时,你喜欢缩进。“为什么要咆哮?”彼得,你真的在为elisp作为配置机制的可用性辩护吗?嘿嘿!Elisp作为一种配置机制比大多数IDE和编辑器提供的要有用得多。有了M-x Appropros之类的东西,要想知道如何配置东西并让它做你想做的事情要比试图在成堆的对话框中挖掘要容易得多。@TravisB.Hartwell Nooo。。。。更可搜索!=更容易使用。如何在Emacs中更改选项卡宽度?在.emacs文件中写入(setq选项卡宽度8)。换句话说,我需要知道命令是“setq”而不是“set”,我需要知道它是制表符宽度而不是“制表符大小”,我需要知道在lisp中设置变量的语法,我需要知道应该在哪里编写该命令的.emacs文件。要在IDE中执行相同的操作,我需要知道什么?没有什么。我可以随便看看,直到我在“编辑器”之类的逻辑类别下找到下拉框。c-default-style选项在复选框后面给了我一个语言列表,在语言名称之后,是否再次键入名称。。。我不明白这如何使CR调用换行符和缩进,该变量设置缩进样式;CC模式用于几种类似C的语言,您可以为每种语言设置缩进样式。请阅读友好手册以了解这些样式。@RNanthak no,因为钩子是特定于c模式的。为了使C++工作,用C++模式钩子或C模式-CONNONK钩子代替C模式钩子来设置C语言所继承的所有语言。关于细节,请参考-我把这个加了上去,因为被接受的答案对我不起作用,而这确实起作用。我不知道这是否是因为我使用的是Emacs 23还是什么,但使用(kbd“RET”)总是让我觉得“函数无效”。