【问题标题】:emacs, flyspell, deactivate "C-." key bindingemacs,flyspell,停用“C-”。键绑定
【发布时间】:2013-04-18 13:15:10
【问题描述】:

我有这个小问题,我有一些键绑定,例如 C-. C-xC-. C-m。激活 flyspell 模式后,我无法使用这些命令。在我的 .emacs 文件中,我在

之前有接下来的 2 行
(global-unset-key (kbd "C-."))
(define-key (current-global-map) (kbd "C-.") nil)
(global-set-key (kbd "C-. C-l") 'global-linum-mode) 

然后,我的C-. C-l 可以工作,但是在激活 flyspell 模式时就不行了。绑定到C-. 的命令是flyspell-auto-correct-word。我尝试按如下方式停用它:

;; first try
(defun flyspell-auto-correct-word-disable() (define-key (current-local-map) (kbd "C-.") nil))
(add-hook 'flyspell-mode-hook 'flyspell-auto-correct-word-disable)
;; second try
(define-key (current-global-map) [remap flyspell-auto-correct-word] nil)

所有尝试都不起作用,我该怎么办?我在 Emacs 23 和 24 中尝试过,我遇到了同样的问题。

【问题讨论】:

    标签: emacs elisp emacs24 flyspell


    【解决方案1】:

    怎么样:

    (eval-after-load "flyspell"
      '(define-key flyspell-mode-map (kbd "C-.") nil))
    

    您的第一个解决方案几乎是正确的,但您必须记住,当前本地地图是由主要模式设置的,而不是次要模式。最好的选择是直接访问flyspell-mode-map 并对其进行修改(另一种选择是在minor-mode-map-alist 中找到它,但我认为这会不必要地复杂)。

    另外,我更喜欢将此类特定于模式的设置放在eval-after-load 中(这意味着它们将被评估一次)而不是在挂钩中(在这种情况下,设置会被多次评估:每次一个缓冲区激活flyspell-mode )。但这是一个偏好问题,任何一种方式都可以。

    【讨论】:

    • 我也有同样的问题,但现在使用 php-mode,这次我尝试了 (eval-after-load "php" '(define-key php-mode-map (kbd "C- .") nil)) 但它不起作用。我知道,我应该更改我的键绑定,但我想知道它为什么不起作用,谢谢!
    • 我的系统上没有安装php-mode;它是标准的吗?您应该检查哪个库定义了php-modephp-mode-map。这可以通过使用C-h v php-mode-mapC-h f php-mode 访问emacs 的文档系统来完成。您应该在eval-after-load 表单中输入的名称是没有“.el”后缀的库名称。
    • 非常感谢,我的代码做错了,最后是(eval-after-load "php-mode" '(define-key php-mode-map (kbd "C-.") nil)),是的,它存在php-mode-map
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2013-06-12
    • 2022-01-21
    • 2010-11-27
    • 2023-03-17
    • 1970-01-01
    相关资源
    最近更新 更多