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

时间:2014-08-28 06:26:38

标签: emacs evil-mode

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

(add-hook 'evil-insert-state-entry-hook 'evil-emacs-state)

o cw 后,我仍处于插入状态。

7 个答案:

答案 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模式下有两个潜在的缺点:

  1. 您无法使用ESC键作为ALT键映射的另一种前缀方式;和
  2. 如果您通过tty访问Emacs,则存在风险(所以我被告知,虽然我没有遇到过这种情况),Emacs会将ALT修改后的密钥解释为ESC后跟字符,这会产生差异。插入模式比emacs模式。
  3. 我认为这两个问题都不严重。

答案 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)

我如何成为unix乍得:

;; unix chad setting
(defalias 'evil-insert-state 'evil-emacs-state)
(define-key evil-emacs-state-map (kbd "<escape>") 'evil-normal-state)
(setq evil-emacs-state-cursor '(bar . 1))

enter image description here