我知道evil-escape-sequence
,但据我所知,你只能将一个键绑定到它。我想要fd
和jh
都能让我从插入模式进入正常模式。
我也尝试了(map! :i "jh" #'evil-normal-mode)
这样的方法,但是用这个方式,每当我输入j
时,Emacs就会冻结并等待我完成命令。
我知道evil-escape-sequence
,但据我所知,你只能将一个键绑定到它。我想要fd
和jh
都能让我从插入模式进入正常模式。
我也尝试了(map! :i "jh" #'evil-normal-mode)
这样的方法,但是用这个方式,每当我输入j
时,Emacs就会冻结并等待我完成命令。
我使用了keychord包来实现这个功能。请注意,该包通过测量按键之间的时间差来确定是否触发配对的函数。以下是如何在额外功能中使用 h, j, k, l
(在正常模式下映射为导航键)。
在 'init.el' 中添加 (package! key-chord)
,并在 'config.el' 中添加以下代码。
(require 'key-chord)
(key-chord-mode t)
(key-chord-define-global "fd" 'evil-normal-state)
(key-chord-define-global "FD" 'evil-normal-state)
(key-chord-define-global "jh" 'evil-normal-state)
(key-chord-define-global "JH" 'evil-normal-state)
我添加了大写等效项,以便在大写锁定打开时仍能具有相同的功能。
对于Doom Emacs,
在通过spc-f-p打开的package.el
中,
输入(package! key-chord)
来安装包。
为了重新映射按键,我发现这个链接很有帮助https://dev59.com/GGkv5IYBdhLWcg3wewxd#13543550
如果您不想使用键绑定,还有另一种方法:
(defun evil-insert-jk-for-normal-mode ()
(interactive)
(insert "j")
(let ((event (read-event nil)))
(if (= event ?k)
(progn
(backward-delete-char 1)
(evil-normal-state))
(push event unread-command-events))))
(define-key evil-insert-state-map "j" 'evil-insert-jk-for-normal-mode)
(在 doom-emacs v3.0.0-alpha 中测试过。)