1

Evil モードで Emacs を試しています。

C-wEvil モードのバッファだけでなく、グローバルに定義されている独自のウィンドウ操作ショートカットのプレフィックスとして使用したいと思います。init.el に次のコードがあります

(define-prefix-command 'my-window-map)
(global-set-key (kbd "C-w") 'my-window-map)
(define-key my-window-map (kbd "h") 'windmove-left)
(define-key my-window-map (kbd "j") 'windmove-down)
(define-key my-window-map (kbd "k") 'windmove-up)
(define-key my-window-map (kbd "l") 'windmove-right)
(define-key my-window-map (kbd "v") 'split-window-right)
(define-key my-window-map (kbd "b") 'split-window-below)
(define-key my-window-map (kbd "x") 'delete-window)
(define-key my-window-map (kbd "o") 'delete-other-windows)

これは、Evil がロードされていない場合に機能しますが、Evil をロードすると、競合するマップが上書きされます (C-w bたとえば)。

また、 evil-maps.elから L106-158 と L236 をコメント アウトすることもできます。私のマップは機能しますが、evil-maps.el の変更には対処したくありません。

Evil がプレフィックスを使用するのを防ぐ方法C-w、または後で設定を解除する方法はありますか?

4

2 に答える 2

9

C-wプレフィックスは に切り替えるため、そのマップで定義を解除ても役に立ちません。関連する「evil-maps」ファイル内のキー マッピングは に設定され、そのバインディングは他のほとんどのEvil マップに継承されます。この方法で独自のバインディングを使用できるように、そのキーバインディングを に設定できます。evil-window-mapC-wC-wevil-motion-state-mapevil-window-mapnil

(eval-after-load "evil-maps"
  (define-key evil-motion-state-map "\C-w" nil))

ただし、この方法では継承evil-insert-state-mapevil-emacs-state-map継承もされないため (私は確信しています)、これらのマップでもバインドを解除する必要があります。したがって、以下を使用して、3 つのマップすべてを一度にアンバインドします。

(eval-after-load "evil-maps"
  (dolist (map '(evil-motion-state-map
                 evil-insert-state-map
                 evil-emacs-state-map))
    (define-key (eval map) "\C-w" nil)))

nilをに置き換え'my-window-mapて独自のマッピングに再バインドすることもできますが、 への呼び出しを介して既に公開されている可能性がありますglobal-set-key

于 2014-07-28T08:55:18.737 に答える