2016-05-15 200 views
1

我是Emacs的新手,并且一直使用邪恶模式。我一直在重新映射一些vim中的映射。在vim中,使用map函数很容易重新映射密钥。我想重新映射cwciwdwdiw。但我对elisp没有太多的了解。那么有没有任何插件或功能可以轻松映射。 谢谢。邪恶模式Emacs中的键映射

回答

1

首先是坏消息:开箱即用,目前不能在不影响其他运营商的情况下实现。原因是c是一个操作符,因此只要键入c,Emacs就会执行evil-change。然后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) 

实际上,这种技术将允许以通用的方式实现特定于操作符的绑定。