Comment configurer les raccourcis clavier pour les modes dans un état Evil spécifique?

9

J'ai un ensemble de raccourcis clavier que j'utilise pour les deux web-modeet php-modeen mode insertion (de Evil). Je ne peux donc pas utiliser set-local-mapou quelque chose. Parce qu'en mode normal, les mêmes touches appellent alors d'autres commandes. Les liaisons doivent donc être actives evil-insert-state-mapuniquement.

J'ai les éléments suivants:

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

Ainsi, à chaque fois web-modeou en php-modecours de chargement, ces raccourcis clavier seront activés.

Le problème est le suivant: supposons que j'ai deux tampons ouverts, l'un dans l'autre php-modeet l'autre dans web-mode. Lorsque le web-modetampon est le tampon actuel et que je passe à un autre tampon qui est dedans php-mode, les web-modeliaisons sont toujours actives à l'intérieur du php-modetampon.

J'ai essayé de résoudre ce problème en utilisant (add-hook 'web-mode-hook [...])et (add-hook 'php-mode-hook [...])au lieu de configurer les liaisons dans eval-after-load. Mais cette solution ne fonctionne pas dans cette situation.

Aucune suggestion? J'apprécierai vraiment cela.

ReneFroger
la source

Réponses:

12

Evil a la evil-define-keymacro pour définir des commandes pour certains états dans une image clé spécifique uniquement:

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

Il est capable de retarder l'exécution de la liaison (en s'utilisant eval-after-loadlui-même) et peut également prendre plus d'une paire de raccourcis clavier, ce qui est un ajout assez astucieux.

wasamasa
la source
Votre solution fonctionne, je vous en suis reconnaissant. Je n'ai jamais su qu'il existait une clé mal définie. Et en effet assez astucieux que vous pourriez lier plus de paires de commandes au clavier evil-define-key.
ReneFroger