Skip to content

Instantly share code, notes, and snippets.

@hyone
Created October 28, 2011 19:04
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save hyone/1323137 to your computer and use it in GitHub Desktop.
Save hyone/1323137 to your computer and use it in GitHub Desktop.
evil-text-object-defun
(require 'evil)
(setq evil-move-defun-alist
'((ruby-mode . (ruby-beginning-of-defun . ruby-end-of-defun))
(c-mode . (c-beginning-of-defun . c-end-of-defun))
(js2-mode . (js2-beginning-of-defun . js2-end-of-defun))))
(defun evil-move-defun (count &optional begin-defun end-defun)
"Move by defun"
(let ((count (or count 1))
(begin-defun (or begin-defun 'beginning-of-defun))
(end-defun (or end-defun 'end-of-defun)))
(evil-motion-loop (var count)
(cond
((< var 0) (funcall begin-defun))
(t (funcall end-defun))))))
(evil-define-text-object evil-a-defun (count)
"Select a defun."
(let* ((mode-defuns (cdr-safe (assq major-mode evil-move-defun-alist)))
(begin-defun (car-safe mode-defuns))
(end-defun (cdr-safe mode-defuns)))
(evil-an-object-range count
(lambda (count) (evil-move-defun count begin-defun end-defun))
nil nil nil)))
(define-key evil-outer-text-objects-map "f" 'evil-a-defun)
@Hi-Angel
Copy link

Hi-Angel commented Dec 5, 2018

This one looks a lot simpler, does it? And works for me.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment