emacs evil-mode中ex命令的关键映射

时间:2013-12-07 07:30:16

标签: emacs evil-mode

在emacs evil-mode中,如何绑定一个键序列,以便预先填充evil-mode ex命令行并定位光标?在vim中,我可以这样做:

nnoremap g/r :%s//g<left><left>

在emacs中,我尝试了这个(和几个变体):

(define-key evil-normal-state-map "g/" nil)
(define-key evil-normal-state-map (kbd "g/r")
    (lambda () (interactive) (kbd ":%s/")))

它没有任何效果,我在尝试键映射后看不到任何消息。

看起来emacs曾经有一个有用的函数evil-ex-read-command,它将输入发送到邪恶模式命令行:

https://github.com/magnars/.emacs.d/blob/master/site-lisp/evil/evil-ex.el#L554

但是这个功能似乎不再可用了。

1 个答案:

答案 0 :(得分:6)

如果您要绑定组合键

  1. 按下并释放g
  2. 按下并释放/
  3. 按下并释放r
  4. kdb中的字符串应为"g / r"

    Emacs并不像vim那样基于击键,但击键只是执行函数的一种方法。因此,在正常模式下按k不会执行函数k(如在vim中),而是self-insert-char。这意味着您不会将组合g / r绑定到等于其他一些键击,而是调用任意函数。而且邪恶定义了一个evil-ex函数,它完全符合您的要求(实际上它是确切的函数,当您在正常模式下按:时调用它。)

    未经测试但应该可以正常使用

    (define-key evil-normal-state-map (kbd "g / r") (lambda () (evil-ex "%s/")))