最近我尝试了Emacs并发现Evil对保持我的vim习惯很有帮助.我习惯输入"jj"从插入模式返回正常模式,就像许多Vimers一样,但不知道如何在Evil模式下进行.
我这样映射但似乎不正确:
(define-key evil-insert-state-map (kbd "jj") 'evil-normal-state)
Run Code Online (Sandbox Code Playgroud)
E. *_*mbo 27
这适合我.它需要KeyChord库:
;;Exit insert mode by pressing j and then j quickly
(setq key-chord-two-keys-delay 0.5)
(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)
(key-chord-mode 1)
Run Code Online (Sandbox Code Playgroud)
它的灵感来自上面的@phils答案,并基于Simon的编码博客:Emacs和Unity Every Day.
phi*_*ils 22
我不知道它是否适用于Evil,但对于Emacs,KeyChord库通常用于此类事情.
试试吧,看看?
(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)
Run Code Online (Sandbox Code Playgroud)
Lin*_*ver 14
看到这个博客帖子:http://zuttobenkyou.wordpress.com/2011/02/15/some-thoughts-on-emacs-and-vim/并搜索"COFI".我自己使用"kj"版本,它就像Vim一样.
编辑:这是博客文章中的实际代码片段:
(define-key evil-insert-state-map "k" #'cofi/maybe-exit)
(evil-define-command cofi/maybe-exit ()
:repeat change
(interactive)
(let ((modified (buffer-modified-p)))
(insert "k")
(let ((evt (read-event (format "Insert %c to exit insert state" ?j)
nil 0.5)))
(cond
((null evt) (message ""))
((and (integerp evt) (char-equal evt ?j))
(delete-char -1)
(set-buffer-modified-p modified)
(push 'escape unread-command-events))
(t (setq unread-command-events (append unread-command-events
(list evt))))))))
Run Code Online (Sandbox Code Playgroud)
Cao*_*lte 11
如果您正在使用Spacemacs,那么我只是发现这个设置(添加到开头user-init)非常有效,
(setq-default evil-escape-key-sequence "jj")
对于我的 Windows 安装,在 init.el 中添加作为 use-package 邪恶配置的一部分对我有用:
(use-package evil
:ensure t
:config
(evil-mode 1)
(define-key evil-insert-state-map "jj" 'evil-normal-state)
)
Run Code Online (Sandbox Code Playgroud)
对于 Ubuntu,我遵循 E. Sambo 的回答。