¿Cómo configuro las combinaciones de teclas para modos en un estado Evil específico?

9

Tengo un conjunto de combinaciones de teclas que uso para ambos web-modey php-modeen modo de inserción (de Evil). Entonces no puedo usar set-local-mapo algo. Porque en modo normal, las mismas teclas llamarán a otros comandos. Por lo tanto, los enlaces solo deben estar activos evil-insert-state-map.

Tengo lo siguiente:

(eval-after-load 'php-mode
  '(progn
     (define-key evil-insert-state-map
       (kbd "C-<next>") (lambda () (interactive) (insert " = ")))
     (define-key evil-insert-state-map
       (kbd "C-<prior>") (lambda () (interactive) (insert "->")))))

(eval-after-load 'web-mode
  '(progn
     (define-key evil-insert-state-map
       (kbd "C-<next>") 'zencoding-expand-yas) 
     (define-key evil-insert-state-map
       (kbd "C-<prior>") 'zencoding-expand-line)))

Así que cada vez web-modeo php-modese carga, se activarán estas asociaciones de teclas.

El problema es: supongamos que tengo dos buffers abiertos, uno en el php-modey el otro en web-mode. Cuando el web-modebúfer es el búfer actual y cambio a otro búfer que está adentro php-mode, los web-modeenlaces todavía están activos dentro del php-modebúfer.

Intenté resolver este problema usando (add-hook 'web-mode-hook [...])y en (add-hook 'php-mode-hook [...])lugar de configurar los enlaces eval-after-load. Pero esa solución no funciona en esta situación.

¿Alguna sugerencia? Yo realmente lo apreciaría.

ReneFroger
fuente

Respuestas:

12

Evil tiene la evil-define-keymacro para definir comandos para ciertos estados solo en un mapa de teclas específico:

(evil-define-key 'insert emacs-lisp-mode-map (kbd "C-c C-c") 'butterfly
                                             (kbd "<pause>") 'zone)

Es capaz de retrasar la ejecución del enlace (usándose a eval-after-loadsí mismo) y también puede tomar más de un par de teclas y comandos, que es una adición bastante ingeniosa.

wasamasa
fuente
Su solución funciona, estoy agradecido por eso. Nunca supe que existe una clave mal definida. Y, de hecho, es bastante ingenioso que pueda vincular más pares de comandos de teclado al evil-define-key.
ReneFroger