在Emacs中以特定模式设置快捷键(例如ido)

时间:2011-07-07 21:44:04

标签: emacs keyboard-shortcuts flyspell ido

我有两个问题,我相信有些相关:

1)在IDO中,我想将ido-restrict-to-matches更改为 C-SPC C - @ 以外的其他内容。不幸的是我不知道怎么告诉emacs我想要一个不同的快捷方式(比如 C-0 )。

2)我想保护我的 C - ; 但是每当flyspell-mode运行时它超过 C - ; 。我的定义是在.emacs中:

(global-set-key (kbd "C-;") 'mark-paragraph)

但显然flyspell会覆盖这个...(尽管如此,如果我查看帮助 M-h k C - ; 确实说mark-paragraph

有人可以告诉我如何在这些条件下绑定/解除绑定键吗?它必须在不修改ido.el和flyspell.el并重新构建的情况下工作,对吧?

非常感谢!

1 个答案:

答案 0 :(得分:9)

Flyspell为C-;绑定提供了自定义功能,因此您可以M-x customize RET flyspell-auto-correct-binding RET或在~/.emacs中添加类似内容:

(setq flyspell-auto-correct-binding (kbd "C-~")) ; or a binding of your choice

至于ido,你的问题有点令人困惑,因为这意味着有时候你会在迷你游戏之外使用偶像......

ido.el中的文档包含以下建议:

;; To modify the keybindings, use the ido-setup-hook.  For example:
;;(add-hook 'ido-setup-hook 'ido-my-keys)
;;
;;(defun ido-my-keys ()
;;  "Add my keybindings for ido."
;;  (define-key ido-completion-map " " 'ido-next-match)
;;  )

使用这些知识,您可以在自己的“ido-my-keys”功能中更改这样的键绑定:

(define-key ido-completion-map (kbd "C-SPC") nil)
(define-key ido-completion-map (kbd "C-@") nil)
(define-key ido-completion-map (kbd "C-0") 'ido-restrict-to-matches)

还有一个专门用于迷你缓冲器的额外ido钩子,但是不清楚为什么你需要它:ido-minibuffer-setup-hook