特定の悪の状態のモードにキーバインディングを設定するにはどうすればよいですか?


9

(Evilの)挿入モードweb-modephp-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ロードされるたびに、これらのキーバインディングがアクティブになります。

問題は次のとおりです。私が2つのオープンバッファーを持っている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のようなものがあることを知らなかった。そして、実際には、より多くのキーコマンドペアをにバインドできるというかなり気の利いたものですevil-define-key
ReneFroger
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.