Skip to content

Instantly share code, notes, and snippets.

@lily-mara
Last active September 17, 2019 09:42
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lily-mara/b1b920b198a644ab4416 to your computer and use it in GitHub Desktop.
Save lily-mara/b1b920b198a644ab4416 to your computer and use it in GitHub Desktop.
easily create simple evil-mode text objects
; courtesy of Gordon Gustafson on StackOverflow
; originally posted 2014-03-15
; http://stackoverflow.com/questions/18102004/emacs-evil-mode-how-to-create-a-new-text-object-to-select-words-with-any-non-sp
(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)))))
;;; Useage:
; between dollars sign:
(define-and-bind-text-object "$" "\\$" "\\$")
; between pipe characters:
(define-and-bind-text-object "|" "|" "|")
; from the letter b up to the letter c, bound to k (invoke with "vik"):
(define-and-bind-text-object "k" "b" "c")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment