问:Emacs 中的 ,如何为 evil
中的文本对象制作特定于模式的键绑定(bind)?
可以在特定模式下绑定(bind)特定状态(正常、插入等)的键,如下例所示:
(evil-define-key 'normal org-mode "a" 'some-command)
但是,我不清楚如何以特定于模式的方式将键绑定(bind)到
evil-outer-text-objects-map
(或其对应的 -inner-
)。作为替代方案,也不清楚如何通过模式 Hook 以缓冲区本地方式绑定(bind)这些映射中的键。evil-local-set-key
看起来不会这样做,因为它需要一个状态(正常、插入等)作为它的第一个参数,而这与此任务无关。在这种情况下也不清楚如何使用
local-set-key
,因为它需要一个键和一个命令作为参数,但不接受一个映射作为参数。 最佳答案
这有点晚了,但对于问题的第一部分,您可以使用本地 map ,例如:
(defun my-elisp-mode-configuration ()
(with-eval-after-load 'evil
(define-key evil-visual-state-local-map "ie" 'sp-evil-i-sexp)
(define-key evil-operator-state-local-map "ie" 'sp-evil-i-sexp)))
(add-hook 'emacs-lisp-mode-hook #'my-elisp-mode-configuration)
在此示例中,我将“内部”e 运算符绑定(bind)到仅用于 elisp 模式的自定义 sp-evil-i-sexp 文本对象。
来到你的第二个问题; evil 覆盖本地 map ,因此使用 local-set-key 是不够的。相反,您可以使用:
(evil-define-key 'normal emacs-lisp-mode-map (kbd " ") 'my-leader)
请注意,您不能以这种方式覆盖 Evil 的绑定(bind),但可以覆盖那些失业或在全局或本地级别就业的绑定(bind)。如果您想覆盖 Evil 绑定(bind),请使用第一种方法。 evil-make-overriding-map
会导致 local-map 覆盖 Evil 的绑定(bind),但这很少是您想要的,因为您希望 hjkl 至少可以工作,但对于像 dired 这样的模式很有用,而邪恶的意义不大。 脚注:从 Emacs 的角度来看,Evil 的运算符或文本对象没有什么特别之处。他们只是绑定(bind)键盘映射。例如: i 键绑定(bind)到 evil-inner-text-objects-map ,其中包含像 w 这样的文本对象,如下所示:
(define-key evil-visual-state-map "i" evil-inner-text-objects-map)
(define-key evil-inner-text-objects-map "w" 'evil-inner-word)
你可以在 evil-maps.el 中找到这些行
关于emacs - 特定模式或缓冲区本地文本对象是邪恶的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25463369/