如何映射在Emacs危机模式“JJ”,以Esc键(How to map “jj” to Esc in

2019-07-29 08:35发布

最近我尝试Emacs和发现危机有助于保持我的vim的定制。 我已经习惯了打字“JJ”,从插入模式返回正常模式像许多Vimers做,但不知道如何使它在危机模式。

我映射像这样,但似乎不正确的是:

(define-key evil-insert-state-map (kbd "jj") 'evil-normal-state)

Answer 1:

这对我的作品。 它要求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)

它是由@phils启发答案以上,并根据西蒙的编码博客:Emacs和统一每一天 。



Answer 2:

我不知道它是否有效与邪恶,但对于Emacs的一般KeyChord库是专为这样的事情。

试试看?

(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)


Answer 3:

看到这个博客帖子: 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))))))))


Answer 4:

如果你使用Spacemacs然后我就发现,此设置(添加到开始user-init )工作得非常好,

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



Answer 5:

对于我的窗户安装,如添加在init.el为我工作用封装邪配置部分:

(use-package evil
 :ensure t
 :config
 (evil-mode 1)
 (define-key evil-insert-state-map "jj" 'evil-normal-state)
)

对于Ubuntu的,我也跟着E.三宝的答案。



Answer 6:

这是一个比较复杂一点 - 你必须注意的一个字符。 这应该做的伎俩。 (要点是“JK”,你可以很容易地修改它为“JJ”尽管你会注意到,“JK”是更有效/快)。



Answer 7:

这是我自己的解决方案,我一直在使用了一段时间,虽然我使用'JF”其实。

(defun xwl-jj-as-esc ()
  (interactive)
  (if (memq evil-state '(insert replace))
      (let ((changed? (buffer-modified-p)))
          (insert "j")
          (let* ((tm (current-time))
                 (ch (read-key)))
            (if (and (eq ch ?j)
                     (< (time-to-seconds (time-since tm)) 0.5))
                (save-excursion
                  (delete-char -1)
                  (evil-force-normal-state)
                  (set-buffer-modified-p changed?))
              (insert ch))))
    (call-interactively 'evil-next-line)))

(define-key evil-insert-state-map  "j" 'xwl-jj-as-esc)
(define-key evil-replace-state-map "j" 'xwl-jj-as-esc)


文章来源: How to map “jj” to Esc in emacs Evil mode