我不喜欢插入状态,所以我想用 emacs 状态替换它。但是这个设置不起作用:
(add-hook 'evil-insert-state-entry-hook 'evil-emacs-state)
按o或后cw,我仍处于插入状态。
这种方法怎么样:
(setq evil-insert-state-map (make-sparse-keymap))
(define-key evil-insert-state-map (kbd "<escape>") 'evil-normal-state)
我使用它,它似乎可以解决问题。而且由于您没有更改状态,因此您保留了与状态相关的配置,例如光标颜色等。
没想到还没人发这个。。。
(defalias 'evil-insert-state 'evil-emacs-state)
任何试图调用的东西evil-insert-state
最终都会调用evil-emacs-state
。适用于 i、a、o、O 等。
现在 Evil 有一种方法可以做到这一点
(setq evil-disable-insert-state-bindings t)
在加载邪恶之前
参考:https ://github.com/noctuid/evil-guide#use-some-emacs-keybindings
告诉我这是如何工作的。这是一个 hack,基本上evil-insert-state
用evil-emacs-state
. 问题是弄清楚如何使用转义键退出 emacs 状态。例如,当我使用ESC
key 退出 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))
如果关键是您想在执行 vi 使用插入模式的任务时使用普通的 Emacs 编辑,那么擦除插入模式字典即可完成此操作。可能需要 ESC 键让您回到正常模式并让 Cz 让您进入 Emacs 状态;Leo Alekseyev 发布了一小段代码来做到这一点:
(setcdr evil-insert-state-map nil)
(define-key evil-insert-state-map
(read-kbd-macro evil-toggle-key) 'evil-emacs-state)
我使用和喜欢的。处于插入模式而不是 emacs 模式有两个潜在的缺点:
我认为这两个问题都不严重。
从有关的文档中evil-emacs-state-entry-hook
:
进入 Emacs 状态时运行的挂钩。
因此,当您输入(使用)时,该evil-emacs-state
功能就会运行。emacs-state
C-z
但是,您可以这样做:
(define-key evil-normal-state-map (kbd "i") 'evil-emacs-state)
现在的问题是退出 emacs 状态。ESC
我记得在 emacs 状态下绑定存在一些问题, as ESC
is used asMETA
和 (IIRC) Evil 使用一些“特殊”代码来拦截ESC
密钥。
编辑:按照您的评论:这个应该可以工作:
(fset 'evil-insert-state 'evil-emacs-state)