【问题标题】:Rebind emacs "C-d" to delete word重新绑定emacs "C-d" 删除单词
【发布时间】:2012-09-12 16:50:21
【问题描述】:

我尝试了几种不同的方法,但都没有成功。我想在处理 c++ 文件时分别切换 M-d 和 C-d 功能(删除单词、删除字符)。

有人可以帮我吗?

【问题讨论】:

  • 即使这个问题已经得到了正确的回答,我只是想评论一下,您可能会考虑保留键绑定的原样。切换它们没有客观优势,而且如果你训练你的肌肉记忆——这根本不需要很长时间! -- 您将在 Emacs 中获得独立于主要模式的一致行为。

标签: emacs keymapping


【解决方案1】:
(add-hook 'c-initialization-hook
          (lambda ()
            (define-key c++-mode-map "\C-d" 'kill-word)
            (define-key c++-mode-map "\M-d" 'c-electric-delete-forward)))

来自CC Hooks - CC Mode Manulal

变量:c-initialization-hook

在 CC 模式初始化时,每个 Emacs 会话只运行一次挂钩。这是在任何 CC 模式键映射中更改键绑定(或添加新键绑定)的好地方。见Sample .emacs File

【讨论】:

  • 这可以完成工作,但有两个问题。首先,每次使用 C++ 打开新缓冲区时都运行相同的代码。一般来说,这种代码最好在 C++ 模式下一次性运行。其次,它不使用kbd,因此可读性较差/更容易出错。
  • @NicolasDudebout 感谢您的评论。我更新了我的帖子,使其使用c-initialization-hook,每个 Emacs 会话只执行一次,而不是 c++-mode-hook
【解决方案2】:
(eval-after-load "cc-mode"
  '(progn
     (define-key c++-mode-map (kbd "C-d") 'kill-word)
     (define-key c++-mode-map (kbd "M-d") 'delete-char)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多