我真的很喜欢key-chord.el
。它已成为我工作流程中不可或缺的一部分,但有时我希望我可以将它们放在迷你缓冲区中(例如邪恶搜索之类的东西)。具体来说,我希望jj
退出evil-search
并向下移动一行。这可能吗?
我知道我可以将一个充当前缀和命令的命令组合在一起(参见this SO question),这样我就可以将j
绑定到自插入命令,jj
我的特殊命令。如何在指定的空闲时间后中断事件循环?我在蓝色的月亮中输入jj
一次,我仍然喜欢超时的灵活性。
还有其他任何我不知道的方法来实现我想要的吗?
编辑:
原来,这个问题是关于迷你缓冲器的。 key-chord.el
似乎可以正常使用minibuffer-local-map
。但是,它不适用于isearch-mode-map
。将命令绑定到单个常规键(如j
)在isearch中可以正常工作。这就是我想要解决的问题。
答案 0 :(得分:3)
我找到了一个手动重现key-chord.el行为的解决方案。
(defun isearch-exit-chord-worker (&optional arg)
(interactive "p")
(execute-kbd-macro (kbd "<backspace> <return>")))
(defun isearch-exit-chord (arg)
(interactive "p")
(isearch-printing-char)
(unless (fboundp 'smartrep-read-event-loop)
(require 'smartrep))
(run-at-time 0.3 nil 'keyboard-quit)
(condition-case e
(smartrep-read-event-loop
'(("j" . isearch-exit-chord-worker)
("k" . isearch-exit-chord-worker)))
(quit nil)))
;; example bindings
(define-key isearch-mode-map "j" 'isearch-exit-chord)
(define-key isearch-mode-map "k" 'isearch-exit-chord)
这种方法实际上比key-chord.el
有几个优点。
key-chord.el
只会在延迟后显示。答案 1 :(得分:2)
我发现这很有用:
(defun isearch-enable-key-chord ()
(key-chord-mode 1)
(key-chord-define isearch-mode-map "jj" 'isearch-cancel))
(add-hook 'isearch-mode-hook 'isearch-enable-key-chord)