특정 이블 상태의 모드에 대한 키 바인딩을 어떻게 설정합니까?


9

삽입 모드 (악의) web-mode와 둘 다에 사용하는 키 바인딩 세트가 php-mode있습니다. 그래서 나는 set-local-map무언가를 사용할 수 없습니다 . 일반 모드에서는 동일한 키가 다른 명령을 호출합니다. 따라서 바인딩 evil-insert-state-map만 활성화해야합니다 .

나는 다음을 가지고있다 :

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

따라서 web-mode또는 php-mode로드 될 때마다 이러한 키 바인딩이 활성화됩니다.

문제는 : 나는이 열려있는 버퍼의 하나 있다고 가정 php-mode하고있는 다른 web-mode. 때 web-mode버퍼가 현재 버퍼이고 내가에서의 다른 버퍼로 전환 php-modeweb-mode바인딩은 여전히 내부 활성 php-mode버퍼입니다.

내가 사용하여이 문제를 해결하기 위해 노력 (add-hook 'web-mode-hook [...])하고 (add-hook 'php-mode-hook [...])대신에 바인딩을 설정 eval-after-load. 그러나이 상황에서는 해당 솔루션이 작동하지 않습니다.

어떤 제안? 정말 고맙겠습니다.

답변:


12

Evil에는 evil-define-key특정 키맵에서 특정 상태에 대한 명령을 정의 하는 매크로가 있습니다.

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

바인딩 eval-after-load자체 를 사용하여 바인딩 실행을 지연시킬 수 있으며 하나 이상의 키 명령 쌍을 사용할 수도 있습니다.


귀하의 솔루션이 효과가 있습니다. 감사합니다. 악의 정의 키와 같은 것이 있다는 것을 결코 알지 못했습니다. 그리고 더 많은 키 명령 쌍을에 바인딩 할 수 있다는 것은 정말 멋진 일입니다 evil-define-key.
ReneFroger
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.