使用" jk"退出Emacs邪恶的操作员模式keychord

时间:2014-07-26 00:18:33

标签: emacs evil-mode

当我按下" jk"我想退出邪恶模式的操作员暂挂状态快速连续。

例如,如果我按d,然后按jk,则不应删除任何内容,并且Emacs应处于正常模式。

我尝试使用key-chord.el退出操作员模式,但它没有用。

(key-chord-define evil-operator-state-map "jk" 'evil-force-normal-state)

类似的问题是如何使用" jk":key chords in isearch退出isearch。我认为解决方案可能需要类似的方法。

1 个答案:

答案 0 :(得分:1)

这有点hacky,因为它依赖<down>j绑定相同,但它是我能用当前邪恶知识做的最好的。它应该在所有情况下都能正常工作,包括重复。

(define-key evil-operator-state-map "j" 'evil-operator-state-j)

(evil-define-command evil-operator-state-j ()   (save-excursion
    (let ((evt (read-event "Press k to exit operator state" nil 0.5)))
      (if (and (integerp evt) (char-equal evt ?k))
          (keyboard-quit)
        ;; assume <down> is bound to the same as j:
        (let* ((operator-string (substring (this-command-keys) 0 -1)) ; get the keys used to invoke the operator
               (new-macro (kbd (concat operator-string " <down>"))))  ; add " <down>" to the end instead of "j"
          (evil-force-normal-state)
          (execute-kbd-macro new-macro)
          (when (not (null evt))
            (push evt unread-command-events))))))) ; process any other key pressed within 0.5 seconds

如果您发现错误或对其工作方式有任何疑问,请询问。 :)