У мене є набір ключових прив’язок, який я використовую як для режиму вставки, так web-modeі php-modeдля режиму вставки (зла). Так що я не можу використовувати set-local-mapчи щось. Тому що в звичайному режимі ті ж клавіші будуть викликати інші команди. Тому прив'язки повинні бути активними evil-insert-state-mapлише.
У мене є таке:
(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)))
Тому щоразу web-modeабо php-modeзавантажуючись, ці ключі прив'язуються до активізації.
Проблема полягає в тому, що припустимо, у мене є два відкритих буфера, один в php-modeі інший в web-mode. Коли web-modeбуфер є поточним буфером, і я перемикаюсь на інший буфер, який є php-mode, web-modeприв'язки все ще активні всередині php-modeбуфера.
Я намагався вирішити цю проблему, використовуючи (add-hook 'web-mode-hook [...])і (add-hook 'php-mode-hook [...])замість того, щоб встановлювати прив’язки eval-after-load. Але це рішення не працює в цій ситуації.
Будь-які пропозиції? Я б дуже цінував це.
evil-define-key.