有时我希望在行(//)
或行/* */
上完全左对齐临时注释。但是,CC Mode
在键入第二个键时通过自动缩进来覆盖它。一般来说,我喜欢自动缩进关键字等,但我更希望它被禁用以进行评论。 (更新:即。我想禁用 c-electric - 键绑定触发注释缩进的方式,但注释仍应正常缩进)
我已经尝试将这些行放在.emacs
中,但它不会阻止这种行为。
(c-electric-slash nil)
(c-electric-star nil)
答案 0 :(得分:9)
简答:
(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,这是一个交互式编译的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)
...因为在cc-mode.el之前加载了init文件,并且c-mode-base-map
未定义。所以我们使用eval-after-load
(在我的答案的顶部)。第一个参数'cc-mode
必须匹配cc-mode.el末尾的provide
语句。如果您不知道progn
的含义,请执行C-h f progn
。
如果您喜欢这种学习/发现Emacs的方式,您可以考虑阅读我的"How to learn Emacs"。
答案 1 :(得分:0)
我建议您查看c-indent-comment-alist
& c-indent-comments-syntactically-p
个变量。请参阅有关此变量的帮助的更多信息(C-h v
)以及CC模式手册的“Customizing Indentation”和“Style Variables”部分