2015-12-02 14:23:39 +00:00
#+TITLE : Evil-snipe layer
2015-11-08 18:04:44 +00:00
#+HTML_HEAD_EXTRA : <link rel="stylesheet" type="text/css" href="../../../css/readtheorg.css" />
2015-06-10 16:44:30 +00:00
[[file:img/Cat_With_Rifle.jpg ]]
2015-10-30 11:20:58 +00:00
* Table of Contents :TOC_4_org:noexport:
- [[Description ][Description ]]
- [[Install ][Install ]]
- [[Layer ][Layer ]]
- [[Improved f and t search behavior ][Improved f and t search behavior ]]
- [[Two-character search with s ][Two-character search with s ]]
- [[More scopes ][More scopes ]]
- [[Symbol groups ][Symbol groups ]]
- [[Key bindings ][Key bindings ]]
2015-06-10 16:44:30 +00:00
* Description
The package [[https://github.com/hlissner/evil-snipe ][evil-snipe ]]
2015-06-12 01:23:07 +00:00
- enables more efficient searches with ~f~ / ~F~ / ~t~ / ~T~ .
- adds a new, more precise search with ~s/S~
2015-06-10 16:44:30 +00:00
Evil-snipe allows you to search more quickly and precisely in the buffer. It
2015-06-12 01:23:07 +00:00
does so by improving on the built in ~f~ / ~F~ / ~t~ / ~T~ searches and adding another
search command, namely ~s~ / ~S~ .
2015-06-10 16:44:30 +00:00
2015-06-12 01:23:07 +00:00
=evil-snipe= changes ~s/S~ behavior in order to search forward/backwards in the
2015-06-10 16:44:30 +00:00
buffer with two chars.
* Install
** Layer
2016-01-06 05:21:55 +00:00
To use this configuration layer, add it to your =~/.spacemacs= . You will need to
add =evil-snipe= to the existing =dotspacemacs-configuration-layers= list in this
file.
2015-06-10 16:44:30 +00:00
** Improved f and t search behavior
2015-06-12 01:23:07 +00:00
With evil-snipe you can define your own search scope for ~f~ and ~t~ searches
2015-06-10 16:44:30 +00:00
which means that you won't have to jump to the correct line before searching
2015-06-12 01:23:07 +00:00
with ~f~ / ~t~ / ~F~ / ~T~ . And after you have found a match, you can just press
2016-02-29 09:23:14 +00:00
~f~ or ~t~ again afterwards to continue the search. No need to use ~;~ / ~ , ~ .
2015-06-10 16:44:30 +00:00
This alternate behavior is disabled by default, to enable it set the
layer variable =evil-snipe-enable-alternate-f-and-t-behaviors= to =t= :
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers
2015-12-10 21:07:15 +00:00
'((evil-snipe :variables evil-snipe-enable-alternate-f-and-t-behaviors t)))
2015-06-10 16:44:30 +00:00
#+END_SRC
** Two-character search with s
2015-06-12 01:23:07 +00:00
With the ~s~ /~S~ keys you can do a simple search like ~f~/ ~t~ , but instead of
2015-06-10 16:44:30 +00:00
searching for one character, you search for two. This makes the search a lot
2015-06-12 01:23:07 +00:00
more precise than regular ~f~ /~t~ searches. While you can search forward or
backwards in the buffer with ~/~ and ~?~ , ~s~ / ~S~ are much easier to reach,
2015-06-10 16:44:30 +00:00
don't require you to press enter and they are precise enough for many common
purposes.
** More scopes
Evil-snipe also adds several scope options for searches (set =evil-snipe-scope=
and =evil-snipe-repeat-scope= to one of these, the default value is =buffer= ):
| Value | Description |
|---------------+--------------------------------------------------------------------------|
| buffer | search in the rest of the buffer after the cursor (=vim-sneak= behavior) |
| line | search in the current line after the cursor (=vim-seek= behavior) |
| visible | search in the rest of the visible buffer only |
| whole-line | same as =line=, but highlight matches on either side of cursor |
| whole-buffer | same as =buffer=, but highlight *all* matches in buffer |
| whole-visible | same as 'visible, but highlight *all* visible matches in buffer |
2015-06-12 01:23:07 +00:00
If you do not want to replace the regular ~f~ / ~F~ / ~t~ / ~T~ behavior, just
2015-06-10 16:44:30 +00:00
remove this line from =evil-snipe/packages.el= :
=(evil-snipe-replace-evil)=
** Symbol groups
With symbol groups you can let a character stand for a regex, for example a
2016-03-08 08:40:28 +00:00
group of characters. By adding a pair of =(CHAR REGEX)= to the list
=evil-snipe-aliases= you can search for a regex very simply:
2015-06-10 16:44:30 +00:00
2016-03-08 08:40:28 +00:00
- Here we set the ~[~ character to mean =all characters [({= *in all modes* so a search
2015-06-12 01:23:07 +00:00
with ~sa[~ would find ~a[~ , ~a{~ or ~a(~ .
2015-06-10 16:44:30 +00:00
#+BEGIN_SRC emacs-lisp
;; Alias [ and ] to all types of brackets
2016-03-08 08:40:28 +00:00
(push '(?\[ "[[{(]") evil-snipe-aliases)
(push '(?\] "[]})]") evil-snipe-aliases)
2015-06-10 16:44:30 +00:00
#+END_SRC
2016-03-08 08:40:28 +00:00
- Here we set the char ~:~ to mean =a regex matching python function definitions= (but only in python-mode), so by searching with ~f:fff~ you can quickly cycle through
2015-06-10 16:44:30 +00:00
all function definitions in a buffer!
#+BEGIN_SRC emacs-lisp
;; For python style functions
2016-03-08 08:40:28 +00:00
(add-hook 'python-mode-hook
(lambda ()
(make-variable-buffer-local 'evil-snipe-aliases)
(push '(?: "def .+:") evil-snipe-aliases)))
2015-06-10 16:44:30 +00:00
#+END_SRC
2015-06-10 21:16:01 +00:00
* TODO Key bindings
2015-06-10 16:44:30 +00:00