48

最近、私はEmacsを試しましたが、Evilが私のvimのカスタムを維持するのに役立つことがわかりました。多くのVimersが行うように、挿入モードから通常モードに戻るために「jj」と入力することに慣れていますが、Evilモードでそれを作成する方法がわかりません。

私はそれをこのようにマッピングしますが、正しくないようです:

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

7 に答える 7

41

これは私にとってはうまくいきます。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 の回答に触発され、 Simon のコーディング ブログ: Emacs and Unity Every Dayに基づいています。

于 2012-11-24T17:16:01.950 に答える
24

Evil で動作するかどうかはわかりませんが、Emacs では一般的にKeyChordライブラリはこのような目的のために設計されています。

試してみてください。

(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)
于 2012-05-21T03:44:58.910 に答える
16

user-initSpacemacs を使用している場合は、この設定 (の先頭に追加) が非常にうまく機能することがわかりました。

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

于 2016-02-20T18:26:11.963 に答える
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))))))))
于 2012-05-21T00:51:38.470 に答える
0

これは、私がしばらくの間使用してきた独自のソリューションですが、実際には「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)
于 2015-09-18T20:31:14.483 に答える