如何在emacs邪恶模式下将"jj"映射到Esc

lim*_*mon 38 emacs evil-mode

最近我尝试了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)

  • 是的,我可以确认是有效的.这是我使用的,我发现它比公认的答案更顺利. (2认同)

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)

  • 没有谎言,这比我预期的映射更令人困惑. (5认同)

Cao*_*lte 11

如果您正在使用Spacemacs,那么我只是发现这个设置(添加到开头user-init)非常有效,

(setq-default evil-escape-key-sequence "jj")

  • 这实际上是[evil-escape](https://github.com/syl20bnr/evil-escape)包的一部分,所以你不需要所有的spacemacs. (3认同)
  • 如果您在完成这项工作时遇到问题,请尝试添加(setq-default evil-escape-delay 0.2).另外,我建议将这两行放在〜/ .spacemacs文件的user-config部分而不是user-init部分 (3认同)

rog*_*ger 6

对于我的 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 的回答。