更新:evil-regexp-range
was recently replaced with 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")
(這比你想要更多,但它可以幫助別人:)
我會補充說,當前的邪惡已經有一個內部的WORD textobject綁定到'我W'。 – PythonNut
哈哈我沒有在網絡搜索中找到這個...我應該閱讀vim手冊中的一個這些天。謝謝 – lionel