This repository has been archived on 2024-10-22. You can view files and clone it, but cannot push or open issues or pull requests.
spacemacs/layers/+vim/evil-snipe/README.org
2019-05-15 21:08:21 +03:00

106 lines
5 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.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#+TITLE: Evil-snipe layer
#+TAGS: layer|vim
[[file:img/Cat_With_Rifle.jpg]]
* Table of Contents :TOC_5_gh:noexport:
- [[#description][Description]]
- [[#features][Features:]]
- [[#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
This layer adds various replacements for vims default search functions.
** Features:
- Alternative implementation of vims default search operations.
- Replacement of evil-surround with a two-character search.
- Support for alternative scopes for default search operations.
- Support for alternative motions based on configurable regexps.
* 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 wont 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,
dont 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
* Key bindings
| Key binding | Description |
|-------------+-----------------------------------------------------------------------------------------|
| ~f~ | search forward for the next entered character and set the cursor to its position |
| ~F~ | search backward for the next entered character and set the cursor to its position |
| ~t~ | search forward for the next entered character and set the cursor before its position |
| ~T~ | search backward for the next entered character and set the cursor before its position |
| ~s~ | search forward for the next entered two characters and set the cursor to its position |
| ~S~ | search backward for the next entered two characters and set the cursor to its position |