我想在 EMACS 中使用Ctrl+Tab供我自己使用,但是 Emacs org 模式已经有了这个限制。如何使用我自己的绑定而不是 org-mode 绑定。
在我的.emacs文件中,我使用:
(global-set-key (kbd "<C-tab>") 'switch-view )
它可以在任何地方工作,除了 org-mode
我想在 EMACS 中使用Ctrl+Tab供我自己使用,但是 Emacs org 模式已经有了这个限制。如何使用我自己的绑定而不是 org-mode 绑定。
在我的.emacs文件中,我使用:
(global-set-key (kbd "<C-tab>") 'switch-view )
它可以在任何地方工作,除了 org-mode
您描述的键绑定定义org.el
如下:
(org-defkey org-mode-map [(control tab)] 'org-force-cycle-archived)
这意味着它仅在org-mode-map
org-mode 的本地键盘映射之一中有效。以下代码添加了一个在 org-mode 启动时运行的挂钩。它只是从org-mode-map
.
(add-hook 'org-mode-hook
'(lambda ()
(define-key org-mode-map [(control tab)] nil)))
将此代码添加到您的 .emacs 文件中,然后重新启动 emacs。
无论主要模式如何,设置要在任何地方生效的键绑定的更可靠方法是使用自定义键映射定义全局次要模式。
次要模式也可以有本地键盘映射;每当次要模式生效时,其键盘映射中的定义都会覆盖主要模式的本地键盘映射和全局键盘映射
(http://www.gnu.org/software/emacs/manual/html_node/emacs/Local-Keymaps.html)
这样,每次遇到破坏键绑定的模式时,您都不需要弄乱主模式的本地键盘映射。
有关详细信息,请参阅此问答:
Globally override key binding in Emacs
这不起作用,因为正如您所说,org-mode 使用自己的 C-TAB 键绑定。换句话说,即使你定义了一个全局键绑定,一旦你调用 org-mode,它就会用它的本地键绑定覆盖那个绑定。
但是,您可以做的是添加一个在您启动 org-mode 时调用的回调函数,并在该回调函数中重置 C-TAB 以调用 switch-view:
(add-hook 'org-mode-hook (lambda () (local-set-key [(control tab)] 'switch-view)))
将上面的行放在你的 .emacs 文件中,下次你启动一个新的 Emacs 时,你应该很高兴。