最近我尝试了Emacs并发现Evil对保持我的vim习惯很有帮助。我习惯输入“jj”从插入模式返回正常模式,就像许多Vimers一样,但不知道如何在Evil模式下进行。
我这样映射但似乎不正确:
(define-key evil-insert-state-map (kbd "jj") 'evil-normal-state)
答案 0 :(得分:26)
这对我有用。它需要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's Coding Blog: Emacs and Unity Every Day。
答案 1 :(得分:22)
我不知道它是否适用于Evil,但对于Emacs,KeyChord库通常用于此类事情。
试试看?
(key-chord-define evil-insert-state-map "jj" 'evil-normal-state)
答案 2 :(得分: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))))))))
答案 3 :(得分:11)
如果您正在使用Spacemacs,那么我发现此设置(添加到user-init
的开头)效果非常好,
(setq-default evil-escape-key-sequence "jj")
答案 4 :(得分:1)
对于我的Windows安装,添加作为use-package evil配置的一部分,在init.el中为我工作:
const s3 = require('node-s3-client')
const s3Config= {
localDir: './dist',
deleteRemoved: false,
s3Params: {
Bucket: 'cdn',
Prefix: 'dist/',
Metadata: {
'Cache-Control': 'max-age=31536000',
'Expires': oneYearLater(new Date())
}
}
}
const client = s3.createClient({
s3Options: {
accessKeyId: KEY_ID,
secretAccessKey: ACCESS_KEY,
signatureVersion: 'v4',
region: 'us-east-2',
s3DisableBodySigning: true
}
})
client.uploadDir(s3Config)
对于Ubuntu,我遵循了E. Sambo的回答。
答案 5 :(得分:0)
这有点复杂 - 你必须注意前一个角色。 This should do the trick.(要点是“jk”,你可以轻松修改它为“jj”,虽然你会注意到“jk”更有效/更快)。
答案 6 :(得分: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)