Emacs evil-mode如何自动将insert-state更改为emacs-state

tra*_*one 13 emacs evil-mode

我不喜欢插入状态,所以我想用emacs-state替换它.但是这个设置不起作用:

(add-hook 'evil-insert-state-entry-hook 'evil-emacs-state)
Run Code Online (Sandbox Code Playgroud)

o或之后cw,我仍处于插入状态.

cba*_*uer 9

这种方法怎么样:

(setq evil-insert-state-map (make-sparse-keymap))
(define-key evil-insert-state-map (kbd "<escape>") 'evil-normal-state)
Run Code Online (Sandbox Code Playgroud)

我用它,它似乎做了伎俩.而且由于你没有改变状态,你保留了与状态相关的配置,如光标颜色等.


rob*_*bru 7

没想到还没有人发帖。。。

(defalias 'evil-insert-state 'evil-emacs-state)
Run Code Online (Sandbox Code Playgroud)

任何试图调用的东西evil-insert-state最终都会调用evil-emacs-state. 适用于 i、a、o、O 等。


Mos*_*yeb 6

Evil 现在有一种 bulitin 方法可以做到这一点

(setq evil-disable-insert-state-bindings t)
Run Code Online (Sandbox Code Playgroud)

加载邪恶之前

参考:https : //github.com/noctuid/evil-guide#use-some-emacs-keybindings


Gor*_*son 4

告诉我这是如何运作的。这是一个基本上evil-insert-stateevil-emacs-state. 问题是弄清楚如何使用退出键退出 emacs 状态。例如,当我使用ESCkey 退出 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))
Run Code Online (Sandbox Code Playgroud)