当我按下" 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。我认为解决方案可能需要类似的方法。
答案 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
如果您发现错误或对其工作方式有任何疑问,请询问。 :)