18

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

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

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

4

7 回答 7

11

这种方法怎么样:

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

我使用它,它似乎可以解决问题。而且由于您没有更改状态,因此您保留了与状态相关的配置,例如光标颜色等。

于 2015-03-11T11:14:31.823 回答
8

没想到还没人发这个。。。

(defalias 'evil-insert-state 'evil-emacs-state)

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

于 2015-01-06T07:45:48.457 回答
7

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

(setq evil-disable-insert-state-bindings t)

加载邪恶之前

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

于 2019-05-19T10:31:51.063 回答
4

告诉我这是如何工作的。这是一个 hack,基本上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))
于 2014-08-28T20:17:13.837 回答
2

如果关键是您想在执行 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 模式有两个潜在的缺点:

  1. 您不能将 ESC 键用作另一种 ALT 键映射的前缀方式;和
  2. 如果您通过 tty 访问 Emacs,则存在风险(所以我被告知,虽然我没有遇到过),Emacs 会将 ALT 修改的键解释为 ESC 后跟字符,这在插入模式上有所不同在 emacs 模式下。

我认为这两个问题都不严重。

于 2014-09-04T12:28:37.867 回答
1

我是如何成为 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))

在此处输入图像描述

于 2020-07-02T12:38:54.483 回答
0

从有关的文档中evil-emacs-state-entry-hook

进入 Emacs 状态时运行的挂钩。

因此,当您输入(使用)时,该evil-emacs-state功能就会运行。emacs-stateC-z

但是,您可以这样做:

(define-key evil-normal-state-map (kbd "i") 'evil-emacs-state)

现在的问题是退出 emacs 状态。ESC我记得在 emacs 状态下绑定存在一些问题, as ESCis used asMETA和 (IIRC) Evil 使用一些“特殊”代码来拦截ESC密钥。

编辑:按照您的评论:这个应该可以工作:

(fset 'evil-insert-state 'evil-emacs-state)
于 2014-08-28T08:42:41.877 回答