11

有时我想让临时注释在一行(//)或一组行上完全对齐/* */。但是,CC Mode通过在键入第二个键时自动缩进来覆盖它。一般来说,我喜欢关键字等的自动缩进,但我更希望禁用它的评论。(更新:即我想禁用c-electric -key-bindings 触发注释缩进的方式,但注释仍应正常缩进)

我试过把这些线放进去.emacs,但它并没有阻止这种行为。

(c-electric-slash nil)
(c-electric-star nil)
4

2 回答 2

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,它是 '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必须与providecc-mode.el 末尾的语句匹配。如果您不知道是什么progn意思,请执行C-h f progn.

如果您喜欢这种学习/发现 Emacs 的方式,可以考虑阅读我的“如何学习 Emacs”

于 2012-06-16T20:29:41.393 回答
0

我建议查看c-indent-comment-alist&c-indent-comments-syntactically-p变量。请参阅此变量的帮助 ( C-h v) 以及CC 模式手册的“自定义缩进”和“样式变量”部分中的更多信息

于 2012-06-16T12:06:56.530 回答