在emacs中,如何在C/C++;?
有时我希望在一行在emacs中,如何在C/C++;?,emacs,indentation,mode,Emacs,Indentation,Mode,有时我希望在一行(//)或一块行/**/上有完全左对齐的临时注释。但是,CC模式通过在键入第二个键时自动缩进来覆盖此功能。一般来说,我喜欢自动缩进关键字等,但我更喜欢它被禁用的评论。(更新:即,我想禁用c-electric键绑定触发注释缩进的方式,但注释仍应正常缩进) 我曾尝试将这些行放入.emacs,但这并不能阻止这种行为 (c-electric-slash nil) (c-electric-star nil) 我建议查看c-indent-comment-alist和c-indent-com
(//)
或一块行/**/
上有完全左对齐的临时注释。但是,CC模式通过在键入第二个键时自动缩进来覆盖此功能。一般来说,我喜欢自动缩进关键字等,但我更喜欢它被禁用的评论。(更新:即,我想禁用c-electric键绑定触发注释缩进的方式,但注释仍应正常缩进)
我曾尝试将这些行放入.emacs
,但这并不能阻止这种行为
(c-electric-slash nil)
(c-electric-star nil)
我建议查看c-indent-comment-alist
和c-indent-comments-syntactically-p
变量。有关此变量的更多信息,请参见帮助(C-h v
)以及CC模式手册的“”和“”部分
(eval-after-load 'cc-mode
'(progn
(define-key c-mode-base-map "/" 'self-insert-command)
(define-key c-mode-base-map "*" 'self-insert-command)))
我是这样做的:
(eval-after-load 'cc-mode
'(progn
(define-key c-mode-base-map "/" 'self-insert-command)
(define-key c-mode-base-map "*" 'self-insert-command)))
查找绑定到/
的函数:C-hk/
它说“/运行命令c-electric-slash,这是一个交互式编译的Lisp
“cc cmds.el”中的函数
(如果您没有看到指向cc cmds.el
的链接,则您没有安装elisp源。如果您不在Windows上,则可以使用系统的包管理器安装emacs el
包,然后重试。)
按照该链接打开cc cmds.el
。搜索c-electric-slash
时,除了函数定义外,找不到任何其他内容,因此键不会绑定在此文件中。在此目录中搜索cc mode.el
,将显示:
(define-key c-mode-base-map "/" 'c-electric-slash)
现在我们知道了覆盖/
键绑定的“keymap”的名称
如果在init文件中添加类似的内容,启动时可能会出现错误:
(define-key c-mode-base-map "/" 'self-insert-command)
…因为您的init文件是在cc-mode.el之前加载的,并且c-mode-base-map
未定义。因此,我们在加载后使用eval
(见我的答案顶部)。第一个参数,'cc-mode
,必须与cc-mode.el末尾的provide
语句匹配。如果您不知道progn
的意思,请执行C-h f progn
如果你喜欢这种学习方式/发现Emacs,你可以考虑阅读我的.< /p>我还没有读过它(更不用说用新的Emacs术语)了,但是我有一种感觉,你的建议改变了事物的缩进。我不想改变缩进行为:我确实希望注释行在大多数情况下正常缩进,但我不希望(c-electric-slash和(c-electric-star指示当按下
/
或*
时会出现缩进。这可能很简单,只需将/
和*
键从电气功能重新绑定到自插入命令
,但仅适用于CC模式(这是我不知道如何做的位).太棒了!多好的解释啊!.而且也很有效:)…谢谢你…我一定会阅读你建议的指南。建议:更新该指南,以便在加载后使用和eval
。为了实现它的价值,我在创建从c-mode
派生的主模式时遇到了这个问题。通过将两行define key
行添加到我模式的键映射定义中(并将c-mode-base-map
更改为本地地图的名称),我能够消除这种行为。谢谢!