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.
fuente

evil-define-key.