emacs - isearch 中的关键和弦

标签 emacs evil-mode

我真的很喜欢key-chord.el 。它已经成为我工作流程中不可或缺的一部分,但有时我希望可以将它们放在迷你缓冲区中(对于诸如邪恶搜索之类的事情)。具体来说,我希望 jj 退出 evil-search 并向下移动一行。这可能吗?

我知道我可以将一个既充当前缀又充当命令的命令组合在一起(请参阅 this SO question ),这样我就可以将 j 绑定(bind)到自插入命令,并且 jj 到我的特殊命令。在指定的空闲时间后如何中断事件循环?我很少会输入 jj 一次,而且我仍然喜欢超时的灵活性。

还有其他我不知道的方法可以实现我想要的吗?

编辑:

最初,这个问题是关于一般的迷你缓冲区的。 key-chord.el 似乎与 minibuffer-local-map 配合得很好。然而,它不能与isearch-mode-map一起使用。将命令绑定(bind)到单个常规键(例如 j)在 isearch 中确实有效。这就是我要解决的问题。

最佳答案

我找到了一个手动重现 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 仅在延迟后显示。

关于emacs - isearch 中的关键和弦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20926215/

相关文章:

javascript - 如何在编辑 CSS 时自动刷新我的站点?

sorting - 根据自定义比较器对 emacs dired 缓冲区进行排序

emacs - 在邪恶中为正常模式重新绑定(bind)数字

emacs - 邪恶的模式特定或缓冲区本地文本对象?

emacs - 如何让 Dired 忽略具有特定扩展名的文件

macos - 碳 Emacs : no `focus' in minibuffer on incremental search

emacs - 链接时有多个定义。 collect2 : error ld returned 1 exit status

Emacs show-paren-mode + Evil

Emacs evil-mode - 如何重新映射 'hjkl'?

vim - 邪恶的 Emacs 模式 : sentence motions and other questions