有时我想让临时注释在一行(//)
或一组行上完全对齐/* */
。但是,CC Mode
通过在键入第二个键时自动缩进来覆盖它。一般来说,我喜欢关键字等的自动缩进,但我更希望禁用它的评论。(更新:即我想禁用c-electric -key-bindings 触发注释缩进的方式,但注释仍应正常缩进)
我试过把这些线放进去.emacs
,但它并没有阻止这种行为。
(c-electric-slash nil)
(c-electric-star nil)
有时我想让临时注释在一行(//)
或一组行上完全对齐/* */
。但是,CC Mode
通过在键入第二个键时自动缩进来覆盖它。一般来说,我喜欢关键字等的自动缩进,但我更希望禁用它的评论。(更新:即我想禁用c-electric -key-bindings 触发注释缩进的方式,但注释仍应正常缩进)
我试过把这些线放进去.emacs
,但它并没有阻止这种行为。
(c-electric-slash nil)
(c-electric-star nil)
简短的回答:
(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-h k /
它说“/ 运行命令 c-electric-slash,它是 'cc-cmds.el' 中的交互式编译 Lisp 函数”。
(如果您没有看到 的链接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)
现在我们知道要在其中覆盖/
键绑定的“键映射”的名称。
如果你在你的 init 文件中添加这样的东西,你可能会在启动时得到一个错误:
(define-key c-mode-base-map "/" 'self-insert-command)
...因为您的 init 文件是在 cc-mode.el 之前加载的,并且c-mode-base-map
未定义。所以我们使用eval-after-load
(如我回答的顶部)。第一个参数'cc-mode
必须与provide
cc-mode.el 末尾的语句匹配。如果您不知道是什么progn
意思,请执行C-h f progn
.
如果您喜欢这种学习/发现 Emacs 的方式,可以考虑阅读我的“如何学习 Emacs”。
我建议查看c-indent-comment-alist
&c-indent-comments-syntactically-p
变量。请参阅此变量的帮助 ( C-h v
) 以及CC 模式手册的“自定义缩进”和“样式变量”部分中的更多信息