【发布时间】:2014-10-21 22:05:03
【问题描述】:
我不喜欢插入状态,所以我想用 emacs 状态替换它。但是这个设置不起作用:
(add-hook 'evil-insert-state-entry-hook 'evil-emacs-state)
按 o 或 cw 后,我仍处于插入状态。
【问题讨论】:
我不喜欢插入状态,所以我想用 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)
我使用它,它似乎可以解决问题。而且由于您没有更改状态,因此您保留了与状态相关的配置,例如光标颜色等。
【讨论】:
(define-key evil-insert-state-map (kbd "C-o") 'evil-execute-in-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-emacs-state 替换了函数evil-insert-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))
【讨论】:
(define-key evil-emacs-state-map (kbd "C-[") 'evil-normal-state)。
如果您想在执行 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 模式有两个潜在的缺点:
我认为这两个问题都不严重。
【讨论】:
来自关于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 状态。我记得在 emacs 状态下绑定 ESC 存在一些问题,因为 ESC 被用作 META,并且 (IIRC) Evil 使用一些“特殊”代码来拦截 ESC 密钥。
编辑:按照您的评论:这个应该可以工作:
(fset 'evil-insert-state 'evil-emacs-state)
【讨论】: