spacemacs/layers/+vim/evil-snipe/README.org
2016-03-30 22:59:55 -04:00

100 lines
4.2 KiB
Org Mode
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: Evil-snipe layer
[[file:img/Cat_With_Rifle.jpg]]
* Table of Contents :TOC_4_gh: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]]
* Description
The package [[https://github.com/hlissner/evil-snipe][evil-snipe]]
- enables more efficient searches with ~f~ / ~F~ / ~t~ / ~T~.
- adds a new, more precise search with ~s/S~
Evil-snipe allows you to search more quickly and precisely in the buffer. It
does so by improving on the built in ~f~ / ~F~ / ~t~ / ~T~ searches and adding another
search command, namely ~s~ / ~S~.
=evil-snipe= changes ~s/S~ behavior in order to search forward/backwards in the
buffer with two chars.
* Install
** Layer
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.
** Improved f and t search behavior
With evil-snipe you can define your own search scope for ~f~ and ~t~ searches
which means that you won't have to jump to the correct line before searching
with ~f~ / ~t~ / ~F~ / ~T~. And after you have found a match, you can just press
~f~ or ~t~ again afterwards to continue the search. No need to use ~;~ / ~,~.
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
'((evil-snipe :variables evil-snipe-enable-alternate-f-and-t-behaviors t)))
#+END_SRC
** Two-character search with s
With the ~s~/~S~ keys you can do a simple search like ~f~/~t~, but instead of
searching for one character, you search for two. This makes the search a lot
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,
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 |
If you do not want to replace the regular ~f~ / ~F~ / ~t~ / ~T~ behavior, just
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
group of characters. By adding a pair of =(CHAR REGEX)= to the list
=evil-snipe-aliases= you can search for a regex very simply:
- Here we set the ~[~ character to mean =all characters [({= *in all modes* so a
search with ~sa[~ would find ~a[~, ~a{~ or ~a(~.
#+BEGIN_SRC emacs-lisp
;; Alias [ and ] to all types of brackets
(push '(?\[ "[[{(]") evil-snipe-aliases)
(push '(?\] "[]})]") evil-snipe-aliases)
#+END_SRC
- 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 all function definitions in a buffer!
#+BEGIN_SRC emacs-lisp
;; For python style functions
(add-hook 'python-mode-hook
(lambda ()
(make-variable-buffer-local 'evil-snipe-aliases)
(push '(?: "def .+:") evil-snipe-aliases)))
#+END_SRC
* TODO Key bindings