Come posso impostare le associazioni dei tasti per le modalità in uno stato Male specifico?


9

Ho una serie di combinazioni di tasti che uso per entrambi web-modee php-modein modalità di inserimento (del male). Quindi non posso usare set-local-mapo qualcosa del genere. Perché in modalità normale, gli stessi tasti chiameranno quindi altri comandi. Quindi i binding devono essere attivi evil-insert-state-mapsolo in.

Ho il seguente:

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

Quindi, ogni volta web-modeche php-modeviene caricato, questi collegamenti chiave verranno attivati.

Il problema è: supponiamo che io abbia due buffer aperti, uno in php-modee l'altro in web-mode. Quando il web-modebuffer è il buffer corrente e passo a un altro buffer che è in php-mode, i web-modebinding sono ancora attivi all'interno del php-modebuffer.

Ho provato a risolvere questo problema utilizzando (add-hook 'web-mode-hook [...])e (add-hook 'php-mode-hook [...])invece di impostare i binding in eval-after-load. Ma quella soluzione non funziona in questa situazione.

Eventuali suggerimenti? Lo apprezzerei molto.

Risposte:


12

Il male ha la evil-define-keymacro per definire i comandi per determinati stati solo in una keymap specifica:

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

È in grado di ritardare l'esecuzione dell'associazione (usando eval-after-loadse stesso) e può anche prendere più di una coppia chiave-comando che è un'aggiunta piuttosto ingegnosa.


La tua soluzione funziona, te ne sono grato. Non ho mai saputo che esistesse una chiave per definire il male. E in effetti abbastanza carino che potresti associare più coppie di comandi chiave al evil-define-key.
ReneFroger,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.