更新:evil-regexp-range
最近 に置き換えられましたevil-select-paren
。これは現在の悪で機能し、古いものと同じ使い方があります:
(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 nil))
(evil-define-text-object ,outer-name (count &optional beg end type)
(evil-select-paren ,start-regex ,end-regex beg end type count t))
(define-key evil-inner-text-objects-map ,key (quote ,inner-name))
(define-key evil-outer-text-objects-map ,key (quote ,outer-name)))))
元の回答:
複数の新しいテキスト オブジェクトを定義することになった場合、特に内部オブジェクトと外部オブジェクトの両方をバインドする場合は、繰り返しが煩わしくなります。その障壁にぶつかった場合は、これを試してください。
(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-regexp-range count beg end type ,start-regex ,end-regex t))
(evil-define-text-object ,outer-name (count &optional beg end type)
(evil-regexp-range count beg end type ,start-regex ,end-regex nil))
(define-key evil-inner-text-objects-map ,key (quote ,inner-name))
(define-key evil-outer-text-objects-map ,key (quote ,outer-name)))))
使用法:
; between dollar signs:
(define-and-bind-text-object "$" "\\$" "\\$")
; between pipe characters:
(define-and-bind-text-object "|" "|" "|")
; from regex "b" up to regex "c", bound to k (invoke with "vik" or "vak"):
(define-and-bind-text-object "k" "b" "c")
(これはあなたが望んでいた以上のものですが、誰かを助けるためにここに残します:)