为了账号安全,请及时绑定邮箱和手机立即绑定

全局覆盖Emacs中的键绑定

全局覆盖Emacs中的键绑定

全局覆盖Emacs中的键绑定如何设置全局覆盖并优先于该键的所有其他绑定的键绑定?我希望覆盖所有主要/次要模式映射,并确保绑定始终有效。当然,这是行不通的:(global-set-key "\C-i" 'some-function)它在text-mode,但是当我用lisp-mode, C-i是反弹到lisp-indent-line.我可以在lisp-mode每一种模式都是个别的,但必须有更简单的方法。每次为新文件类型安装新模式时,我都必须返回并检查,以确保所有的键绑定都不会被新模式覆盖。我想这样做是因为我想模仿我已经从其他编辑那里学到的和根深蒂固的绑定。
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

对于所有“覆盖”键绑定,我使用一个次要模式:

(defvar my-keys-minor-mode-map  (let ((map (make-sparse-keymap)))
    (define-key map (kbd "C-i") 'some-function)
    map)
  "my-keys-minor-mode keymap.")(define-minor-mode my-keys-minor-mode  "A minor mode so that my key settings override annoying major modes."
  :init-value t
  :lighter " my-keys")(my-keys-minor-mode 1)

这有一个额外的好处,能够在一次突然之间关闭我的所有修改(只是禁用次要模式),以防其他人在驱动键盘,或者如果我需要查看默认键绑定的功能。

请注意,您可能需要在小型缓冲区中关闭它:

(defun my-minibuffer-setup-hook ()
  (my-keys-minor-mode 0))(add-hook 'minibuffer-setup-hook 'my-minibuffer-setup-hook)


查看完整回答
反对 回复 2019-06-28
?
qq_遁去的一_1

TA贡献1725条经验 获得超7个赞

作为对.的补充斯科特弗雷泽的回答,我编写了以下代码,这样我的键绑定就保留了优先级,即使随后加载的库引入了它们自己的新键映射。

因为密钥映射可以在编译时生成,load似乎是最好的地方。

(add-hook 'after-load-functions 'my-keys-have-priority)(defun my-keys-have-priority (_file)
  "Try to ensure that my keybindings retain priority over other minor modes.

Called via the `after-load-functions' special hook."
  (unless (eq (caar minor-mode-map-alist) 'my-keys-minor-mode)
    (let ((mykeys (assq 'my-keys-minor-mode minor-mode-map-alist)))
      (assq-delete-all 'my-keys-minor-mode minor-mode-map-alist)
      (add-to-list 'minor-mode-map-alist mykeys))))


查看完整回答
反对 回复 2019-06-28
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

安装use-package你就完蛋了:

(require 'bind-key)(bind-key* "C-i" 'some-function)


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 698 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信