Saya memiliki satu set binding kunci yang saya gunakan untuk keduanya web-mode
dan php-mode
dalam mode insert (of Evil). Jadi saya tidak bisa menggunakan set-local-map
atau sesuatu. Karena dalam mode normal, tombol yang sama kemudian akan memanggil perintah lain. Jadi binding harus aktif evil-insert-state-map
saja.
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-mode
atau php-mode
sedang dimuat, binding kunci ini akan diaktifkan.
Masalahnya adalah: Misalkan saya memiliki dua buffer terbuka, satu di php-mode
dan yang lainnya di web-mode
. Ketika web-mode
buffer adalah buffer saat ini dan saya beralih ke buffer lain yang ada di dalam php-mode
, web-mode
binding masih aktif di dalam php-mode
buffer.
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.
sumber
evil-define-key
.