2014-08-28 83 views

回答

2

告訴我如何工作的。這是一個基本上取代功能evil-insert-stateevil-emacs-state。問題是搞清楚如何用退出鍵退出emacs狀態。

; 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)) 
+0

「問題是搞清楚如何用退出鍵退出emacs狀態。」這不是一個問題。我已經這樣做了:(define-key evil-emacs-state-map [escape]'evil-normal-state) o(evil-open-below)的某些動作與邪惡插入狀態在文件惡-insert.el – transtone 2014-08-28 23:26:50

+0

它的工作原理!謝謝。 – transtone 2014-08-28 23:39:34

0

從文檔中關於evil-emacs-state-entry-hook

掛鉤進入Emacs的狀態下運行。

所以,當你進入emacs-state(與C-Z^)的evil-emacs-state功能運行。

你可以,但是,這樣做:

(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) 
+1

謝謝,我已經改變了關鍵圖。我只想把o/O,cw改爲evil-emacs-state,而不是evil-insert-state。 – transtone 2014-08-28 16:08:33

2

如果一點是,你要使用正常的Emacs編輯在做的時候:比如,當我退出Emacs狀態與ESC關鍵,而不是當我嘗試做相同的C-[這個版本工作正常vi使用插入模式的任務類型,然後擦除插入模式字典來完成此操作。可能希望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-keymapping的另一種前綴方式;和
  2. 如果您通過tty訪問Emacs,存在風險(所以我被告知,雖然我沒有遇到過這個問題),但Emacs會將ALT修改的鍵解釋爲ESC,然後是字符,這會產生差異在插入模式下比在emacs模式下。

我不認爲這兩個問題都很嚴重。

4

驚訝沒有人發佈了這個呢...

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

凡是試圖調用evil-insert-state最終只會調用evil-emacs-state。適用於I,A,O,O等

+0

謝謝!我做了另一種方式,雖然:) – keymone 2016-10-02 10:15:42

8

如何對這種做法:

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

我使用它,它似乎這樣的伎倆。由於你沒有改變狀態,你保留了狀態相關的配置,如光標顏色等。

+1

整潔,簡單,效果很好,謝謝!我還推薦'(define-key evil-insert-state-map(kbd「C-o」)'evil-execute-in-normal-state)'仍然能夠從插入狀態執行一次性邪惡命令 – tlegutko 2017-07-08 18:45:27