emacs,flyspell,停用“C-”。键绑定

时间:2013-04-18 13:15:11

标签: emacs elisp emacs24 flyspell

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

之前的下两行
(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中尝试过,我遇到了同样的问题。

1 个答案:

答案 0 :(得分:10)

怎么样:

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

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

另外,我更喜欢在eval-after-load内放置这些特定于模式的设置(这意味着它们将被评估一次)而不是挂钩(在这种情况下,设置会被多次评估:每次缓冲激活{ {1}})。但这是一个偏好问题,无论哪种方式都很好。