“如何绘制地图”;jj";在emacs邪恶模式下Esc
最近我尝试了Emacs,发现邪恶有助于保持我的vim习惯。我习惯于键入“jj”从插入模式返回正常模式,就像许多Vimer一样,但不知道如何在邪恶模式下返回正常模式 我这样绘制地图,但似乎不正确:“如何绘制地图”;jj";在emacs邪恶模式下Esc,emacs,evil-mode,Emacs,Evil Mode,最近我尝试了Emacs,发现邪恶有助于保持我的vim习惯。我习惯于键入“jj”从插入模式返回正常模式,就像许多Vimer一样,但不知道如何在邪恶模式下返回正常模式 我这样绘制地图,但似乎不正确: (define-key evil-insert-state-map (kbd "jj") 'evil-normal-state) 这有点复杂-你必须注意前面的角色。(要点是“jk”,你可以很容易地将其修改为“jj”,尽管你会注意到“jk”更高效/更快)。请参阅本文:并搜索“cofi”。我自己使用“kj
(define-key evil-insert-state-map (kbd "jj") 'evil-normal-state)
这有点复杂-你必须注意前面的角色。(要点是“jk”,你可以很容易地将其修改为“jj”,尽管你会注意到“jk”更高效/更快)。请参阅本文:并搜索“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))))))))
我不知道它是否适用于邪恶,但对于Emacs来说,一般来说,这个库就是为这类事情而设计的 试试看
(键和弦定义邪恶插入状态映射“jj”'邪恶正常状态)
这对我很有用。它要求图书馆:
;;按j键退出插入模式,然后快速按j键
(setq键和弦双键延迟0.5)
(键和弦定义邪恶插入状态映射“jj”'邪恶正常状态)
(主音和弦模式1)
它的灵感来源于上面的@phils答案并基于此。这是我自己的解决方案,我已经使用了一段时间,尽管我实际上使用了“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)
(将xwl jj定义为esc()
(互动)
(如果(memq邪恶状态)(插入替换))
(let((已更改)(缓冲区修改-p)))
(插入“j”)
(let*((tm(当前时间))
(ch(读取键)))
(如果(和(等式ch?j)
(<(时间到秒(从tm开始的时间))0.5))
(省去远足
(删除字符-1)
(邪恶势力正常状态)
(set-buffer-modified-p已更改?)
(插入ch)))
(以交互方式调用“邪恶的下一行”))
(将键插入状态映射“j”'xwl jj定义为esc)
(将状态映射“j”xwl jj定义为esc)
如果您使用的是SpaceMac,那么我刚刚发现这个设置(添加到user init
的开头)工作得非常好
(setq default evil escape key sequence“jj”)
用于我的windows安装,作为在init.el中为我工作的使用包邪恶配置的一部分添加:
(use-package evil
:ensure t
:config
(evil-mode 1)
(define-key evil-insert-state-map "jj" 'evil-normal-state)
)
对于Ubuntu,我遵循了E.Sambo的答案。没有谎言,这比我对映射的预期更令人困惑。@opert我想用'jk'作为转义键,但在我交换了上面所有的'j'和'k'之后,我再也不能输入'k'(它变成了j??)。谢谢。@Tony我不确定。听起来你好像有某种输入编码问题。@Tony我在尝试将其改编为“jj”时也遇到了同样的问题。修改后重新启动emacs修复了它。我可以再打一次“k”。是的,我可以确认它有效。这就是我所用的,我发现它比公认的答案更流畅。很好!工作得很有魅力!我说邪恶模式应该依赖于这个库,并将该功能引入邪恶,因为这就是vim的行为方式。我发现“kj”比“jk”好(jk比“jj”):)这实际上是软件包的一部分,所以你不需要所有的SpaceMac。如果你在这方面遇到困难,也可以尝试添加(setq默认邪恶逃脱延迟0.2)。另外,我建议将这两行放在~/.spacemacs文件的user config部分中,而不是放在sambo的user init section中。谢谢你的回答,效果很好。但是我以前在vim中使用“ii”而不是“jj”,所以我用上面的代码检查了它。但它不起作用。我是emacs和lisp的新手,对此我有点困惑。我检查了一些其他功能,比如addhook,但它们也不起作用。您能帮我找到原因吗?@AMIRREZASADEQI您必须安装key chord,然后将代码放入您的Emacs init文件(~/.Emacs或~/.Emacs.d/init.el)我认为这是迄今为止最好的答案,因为它是来自邪恶软件包本身内部的配置,不需要安装其他软件包。