我不喜欢插入状态,所以我想用emacs-state替换它。但是这个设置不起作用:
(add-hook 'evil-insert-state-entry-hook 'evil-emacs-state)
按 o 或 cw 后,我仍处于插入状态。
答案 0 :(得分:8)
这种方法怎么样:
(setq evil-insert-state-map (make-sparse-keymap))
(define-key evil-insert-state-map (kbd "<escape>") 'evil-normal-state)
我使用它似乎可以解决问题。而且由于你没有改变状态,你保留了与状态相关的配置,如光标颜色等。
答案 1 :(得分:4)
很惊讶没人发布这个...
(defalias 'evil-insert-state 'evil-emacs-state)
任何试图呼叫evil-insert-state
的内容最终都会调用evil-emacs-state
。适用于i,a,o,O等。
答案 2 :(得分:3)
告诉我这是如何运作的。这是一个基本上用evil-insert-state
取代函数evil-emacs-state
的黑客攻击。问题是弄清楚如何使用转义键退出emacs状态。例如,当我使用ESC
键退出emacs状态时,此版本正常工作,但是当我尝试对C-[
执行相同操作时,此版本无效:
; redefine emacs state to intercept the escape key like insert-state does:
(evil-define-state emacs
"Emacs state that can be exited with the escape key."
:tag " <EE> "
:message "-- EMACS WITH ESCAPE --"
:input-method t
;; :intercept-esc nil)
)
(defadvice evil-insert-state (around emacs-state-instead-of-insert-state activate)
(evil-emacs-state))
答案 3 :(得分:2)
如果您想在执行vi使用插入模式的任务时使用正常的Emacs编辑,那么擦除插入模式字典就可以完成此操作。可能需要ESC键让您恢复正常模式并让C-z进入Emacs状态; Leo Alekseyev posts执行此操作的一小段代码:
(setcdr evil-insert-state-map nil)
(define-key evil-insert-state-map
(read-kbd-macro evil-toggle-key) 'evil-emacs-state)
我使用和喜欢。在插入模式而不是emacs模式下有两个潜在的缺点:
我认为这两个问题都不严重。
答案 4 :(得分:0)
有关evil-emacs-state-entry-hook
的文档:
进入Emacs状态时运行挂钩。
因此,当您输入evil-emacs-state
( C-z )时,会运行emacs-state
函数。
但是,你可以这样做:
(define-key evil-normal-state-map (kbd "i") 'evil-emacs-state)
现在的问题是退出emacs状态。我记得在emacs状态下绑定ESC
时存在一些问题,因为ESC
用作META
,而(IIRC)Evil使用了一些&#34;特殊&#34;代码拦截ESC
密钥。
编辑:跟随你的评论:这个应该有效:
(fset 'evil-insert-state 'evil-emacs-state)
答案 5 :(得分:0)
Evil现在可以通过这种方法来实现这一目标
(setq evil-disable-insert-state-bindings t)
之前加载邪恶
参考:https://github.com/noctuid/evil-guide#use-some-emacs-keybindings
答案 6 :(得分:0)