邪恶模式Emacs中的键映射

时间:2016-05-15 13:32:54

标签: emacs evil-mode

我是Emacs的新手并且一直在使用邪恶模式。我在重新映射一些我在vim中的映射时遇到了一些麻烦。在vim中,使用map函数重新映射密钥很容易。我想将cw重新映射到ciw,将dw重新映射到diw。但我对elisp没有多少了解。那么是否有任何允许轻松映射的插件或功能。 感谢。

1 个答案:

答案 0 :(得分:3)

首先是坏消息:开箱即用,如果不影响其他运营商,目前这是不可能的。原因是c是一个运算符,因此只要输入evil-change,Emacs就会执行c。然后Evil进入操作员暂挂状态,并读取以下w(或iw)以找出正确的动作。

问题是所有运算符只有一个运算符状态,即只有一个共享键映射。因此,将w更改为iw将改变所有运算符的行为,不仅仅是cd

第一个好消息:如果这对你没问题,那么你就可以做到

(define-key evil-operator-state-map "w" "iw")

现在更好的消息。如果您知道上面的内容,那么使用一点Emacs lisp魔法解决问题相对容易。传递给运算符的范围由函数evil-operator-range确定。我们的想法是建议此功能,并在当前运算符为evil-changeevil-delete时临时更改键绑定。您可以在几个候选键盘中放置新绑定,但evil-operator-state-local-map是合理的选择。

(defun my/evil-motion-range (orig-fun &rest args)
  (if (not (memq this-command '(evil-delete evil-change)))
      (apply orig-fun args)
    (let* ((orig-keymap evil-operator-state-local-map)
           (evil-operator-state-local-map (copy-keymap orig-keymap)))
      (define-key evil-operator-state-local-map "w" "iw")
      (apply orig-fun args))))

(advice-add 'evil-operator-range :around #'my/evil-motion-range)

实际上,这种技术允许以通用方式实现运营商特定的绑定。