Saya memiliki satu set binding kunci yang saya gunakan untuk keduanya web-modedan php-modedalam mode insert (of Evil). Jadi saya tidak bisa menggunakan set-local-mapatau sesuatu. Karena dalam mode normal, tombol yang sama kemudian akan memanggil perintah lain. Jadi binding harus aktif evil-insert-state-mapsaja.
Saya memiliki yang berikut ini:
(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)))
Jadi setiap kali web-modeatau php-modesedang dimuat, binding kunci ini akan diaktifkan.
Masalahnya adalah: Misalkan saya memiliki dua buffer terbuka, satu di php-modedan yang lainnya di web-mode. Ketika web-modebuffer adalah buffer saat ini dan saya beralih ke buffer lain yang ada di dalam php-mode, web-modebinding masih aktif di dalam php-modebuffer.
Saya mencoba menyelesaikan masalah ini dengan menggunakan (add-hook 'web-mode-hook [...])dan (add-hook 'php-mode-hook [...])bukannya mengatur binding di eval-after-load. Tetapi solusi itu tidak berhasil dalam situasi ini.
Ada saran? Aku akan sangat menghargainya.
evil-define-key.