【问题标题】:In emacs, how to disable comment auto-indent in C/C++?在 emacs 中,如何在 C/C++ 中禁用注释自动缩进?
【发布时间】:2012-06-19 03:50:18
【问题描述】:

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

我尝试将这些行放在.emacs 中,但这并不能阻止这种行为。

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

【问题讨论】:

    标签: emacs indentation mode


    【解决方案1】:

    简答:

    (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 上,您可以使用系统的包管理器来安装 @ 987654326@ 包再试。)

    点击该链接打开cc-cmds.el。搜索 c-electric-slash 除了函数定义之外,没有找到任何其他内容,因此键未绑定在此文件中。从此目录中搜索cc-mode.el 显示:

    (define-key c-mode-base-map "/" 'c-electric-slash)
    

    现在我们知道要在其中覆盖 / 键绑定的“键映射”的名称。

    如果你在你的初始化文件中添加这样的东西,你可能会在启动时得到一个错误:

    (define-key c-mode-base-map "/" 'self-insert-command)
    

    ...因为您的 init 文件在 cc-mode.el 之前加载,而 c-mode-base-map 未定义。所以我们使用eval-after-load(如我回答的顶部)。第一个参数'cc-mode 必须匹配cc-mode.el 末尾的provide 语句。如果您不知道progn 的含义,请使用C-h f progn

    如果你喜欢这种学习/发现 Emacs 的方式,可以考虑阅读我的"How to learn Emacs"

    【讨论】:

    • 太棒了!多么棒的解释! .. 它也有效 :) ... 谢谢... 我一定会阅读您建议的指南。
    • 建议:更新它以使用with-eval-after-load
    • 对于它的价值,我在创建从c-mode 派生的主要模式时一直在努力解决这个问题。通过将两个define-key 添加到我的模式键映射的定义中(并将c-mode-base-map 更改为我的本地映射的名称),我能够消除这种行为。谢谢!
    【解决方案2】:

    我建议查看 c-indent-comment-alistc-indent-comments-syntactically-p 变量。请参阅此变量的帮助 (C-h v) 以及 CC 模式手册的“Customizing Indentation”和“Style Variables”部分中的更多信息

    【讨论】:

    • 我还没有读完它(更不用说学习新的 emacs 术语了),但我感觉你的建议改变了如何 事物缩进。我不想更改缩进行为:我确实希望注释行在大多数情况下正常缩进,但我不希望 (c-electric-slash(c-electric-星号 指示缩进发生在 /* 被按下时。也许就像重新绑定/* 键从 electric 功能到 self-insert-command,但仅适用于 CC 模式(我不知道该怎么做)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2011-04-09
    • 1970-01-01
    • 2017-10-09
    相关资源
    最近更新 更多