Belirli bir Evil durumundaki modlar için anahtar bağlamaları nasıl ayarlarım?


9

Ben ikisi için kullandıkları anahtar bağları bir dizi var web-modeve php-mode(Evil) ekleme modunda. Yani kullanamam set-local-mapfalan. Çünkü normal modda, aynı tuşlar diğer komutları çağırır. Dolayısıyla bağların evil-insert-state-mapsadece aktif olması gerekir .

Şunlara sahibim:

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

Böylece her yüklendiğinde web-modeveya php-modeyüklendiğinde, bu anahtar bağlamaları etkinleştirilir.

Sorun olduğunu: İki açık tampon, bir tane var varsayalım php-modeve diğer web-mode. Tüm web-modetampon akım tampondur ve sürmekte olan bir başka tampon geçiş php-mode, web-modebağlamaları hala içinde aktif olan php-modetampon.

Bu sorunu kullanarak (add-hook 'web-mode-hook [...])ve (add-hook 'php-mode-hook [...])bağları kurmak yerine çözmeye çalıştım eval-after-load. Ancak bu çözüm bu durumda işe yaramıyor.

Herhangi bir öneri? Gerçekten minnettar olurum.

Yanıtlar:


12

Kötülük, evil-define-keyyalnızca belirli bir tuş eşlemesindeki belirli durumlar için komutları tanımlama makrosuna sahiptir :

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

Bağlamanın yürütülmesini geciktirebilir ( eval-after-loadkendini kullanarak ) ve aynı zamanda oldukça şık bir ek olan birden fazla anahtar-komut çifti alabilir.


Çözümünüz işe yarıyor, bunun için minnettarım. Kötülük-tanımlı anahtar diye bir şey olduğunu asla bilmiyordum. Ve gerçekten daha şık tuş takımı çiftleri bağlamak olabilir evil-define-key.
ReneFroger
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.