2014-08-28 17 views

risposta

2

Dimmi come funziona. È un hack che sostanzialmente sostituisce la funzione evil-insert-state con evil-emacs-state. Il problema è capire come uscire dallo stato emacs con la chiave di escape. Per esempio, questa versione funziona bene quando esco stato emacs con la chiave ESC, ma non quando provo a fare lo stesso con 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)) 
+0

"Il problema è capire come uscire dallo stato emacs con la chiave di escape." Non è un problema. L'ho già fatto con: (define-male evil-emacs-state-map [escape] 'evil-normal-state) Alcune azioni come o (evil-open-below) sono bingding con male-insert-state in file evil -insert.el – transtone

+0

Funziona! Grazie. – transtone

0

Dalla documentazione su evil-emacs-state-entry-hook:

Ganci a correre quando si entra in stato di Emacs.

Quindi la funzione evil-emacs-state viene eseguito quando si entra emacs-state (con C-z).

È possibile, tuttavia, fare questo:

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

Il problema ora sta uscendo stato di emacs. Ricordo che c'erano problemi con lo ESC in stato emacs, come ESC usato come META e (IIRC) Evil usa un codice "speciale" per intercettare la chiave ESC.

EDIT: dopo il tuo commento: questo dovrebbe funzionare:

(fset 'evil-insert-state 'evil-emacs-state) 
+1

Grazie, ho già modificato la mappa delle chiavi. Voglio solo o/O, cw in male-emacs-state, non male-insert-state. – transtone

2

Se il punto è che si desidera utilizzare il normale Emacs quando si fa il tipo di attività vi utilizza la modalità di inserimento, quindi la cancellazione del dizionario della modalità di inserimento lo consente. Probabilmente è desiderabile che il tasto ESC ti ritorni in modalità normale e che C-z ti porti nello stato di Emacs; Leo Alekseyev posts un po 'di codice che fa questo:

(setcdr evil-insert-state-map nil) 
(define-key evil-insert-state-map 
    (read-kbd-macro evil-toggle-key) 'evil-emacs-state) 

che io uso e piace. Esistono due potenziali svantaggi di essere in modalità di inserimento anziché in modalità emacs:

  1. Non è possibile utilizzare il tasto ESC come un altro modo prefissato di combinazione di tasti ALT; e
  2. C'è un rischio (così mi è stato detto, anche se non l'ho incontrato) se si accede a Emacs tramite una tty, che Emacs interpreterà i tasti modificati dall'AL come ESC seguito dal carattere, che dà una differenza in modalità inserimento rispetto alla modalità emacs.

Non penso che nessun problema sia serio.

4

Sorpreso nessuno ha postato questo ancora ...

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

Tutto ciò che tenta di chiamare evil-insert-state sarà solo finiscono per chiamare evil-emacs-state. Lavora per i, a, o, O, ecc

+0

grazie! ho fatto il contrario però :) – keymone

8

Che ne dite di questo approccio:

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

Io lo uso e sembra fare il trucco. E poiché non stai cambiando lo stato, mantieni le configurazioni relative allo stato come il colore del cursore, ecc.

+1

pulito, semplice e funziona bene, grazie! Raccomando anche '(define-key male-insert-state-map (kbd" C-o ") 'evil-execute-in-normal-state)' per essere ancora in grado di eseguire un comando malvagio una tantum da insert state – tlegutko

Problemi correlati