5

Q: Emacs では、テキスト オブジェクトのモード固有のキー バインディングをどのように作成しますevilか?

次の例に示すように、特定のモードで特定の状態(通常、挿入など)のキーをバインドできます。

(evil-define-key 'normal org-mode "a" 'some-command)

evil-outer-text-objects-mapただし、モード固有の方法でキーを(またはその-inner-対応する)にバインドする方法は明確ではありません。別の方法として、モード フックを介してバッファ ローカルな方法でこれらのマップのキーをバインドする方法も明確ではありません。

evil-local-set-key最初の引数として状態 (通常、挿入など) が必要であり、それはこのタスクには関係ないため、実行するようには見えません。

このインスタンスでの使用方法も明確local-set-keyではありません。引数としてキーとコマンドが必要ですが、引数としてマップを使用しないためです。

4

2 に答える 2

2

誰かがメーリングリストを読んでいるときeval-after-loadに、フックの代わりにキーバインディングを入れた方が良いと述べたので、ここにあります:

(eval-after-load "<mode>"
  '(progn
     <object-definition>))

新しいテキスト オブジェクトの定義に関しては、@gordon-gustafsonから次の関数をお勧めします。

(defmacro define-and-bind-text-object (key start-regex end-regex)
  (let ((inner-name (make-symbol "inner-name"))
        (outer-name (make-symbol "outer-name")))
    `(progn
      (evil-define-text-object ,inner-name (count &optional beg end type)
        (evil-select-paren ,start-regex ,end-regex beg end type count t))
      (evil-define-text-object ,outer-name (count &optional beg end type)
        (evil-select-paren ,start-regex ,end-regex beg end type count nil))
      (define-key evil-inner-text-objects-map ,key (quote ,inner-name))
      (define-key evil-outer-text-objects-map ,key (quote ,outer-name)))))

したがって、その<object-definitions>部分は次のようになります。

(define-and-bind-text-object "<key>" "<start-regex>" "<end-regex>")
于 2014-09-08T07:33:36.470 に答える