2019-01-03 02:12:50 -05:00
|
|
|
#+TITLE: completion/ivy
|
|
|
|
#+DATE: February 13, 2017
|
|
|
|
#+SINCE: v2.0
|
|
|
|
#+STARTUP: inlineimages
|
|
|
|
|
|
|
|
* Table of Contents :TOC_3:noexport:
|
2019-04-25 22:18:17 -04:00
|
|
|
- [[#description][Description]]
|
|
|
|
- [[#module-flags][Module Flags]]
|
|
|
|
- [[#plugins][Plugins]]
|
|
|
|
- [[#hacks][Hacks]]
|
|
|
|
- [[#prerequisites][Prerequisites]]
|
|
|
|
- [[#install][Install]]
|
|
|
|
- [[#macos][MacOS]]
|
|
|
|
- [[#arch-linux][Arch Linux]]
|
|
|
|
- [[#features][Features]]
|
|
|
|
- [[#jump-to-file-project-navigation][Jump-to-file project navigation]]
|
|
|
|
- [[#project-search--replace][Project search & replace]]
|
|
|
|
- [[#in-buffer-searching][In-buffer searching]]
|
|
|
|
- [[#task-lookup][Task lookup]]
|
|
|
|
- [[#ivy-integration-for-various-completing-commands][Ivy integration for various completing commands]]
|
|
|
|
- [[#general][General]]
|
|
|
|
- [[#jump-to-files-buffers-or-projects][Jump to files, buffers or projects)]]
|
|
|
|
- [[#search][Search]]
|
|
|
|
- [[#configuration][Configuration]]
|
|
|
|
- [[#enable-fuzzynon-fuzzy-search-for-specific-commands][Enable fuzzy/non-fuzzy search for specific commands]]
|
|
|
|
- [[#change-the-position-of-the-ivy-childframe][Change the position of the ivy childframe]]
|
|
|
|
- [[#troubleshooting][Troubleshooting]]
|
2019-01-03 02:12:50 -05:00
|
|
|
|
|
|
|
* Description
|
|
|
|
This module provides Ivy integration for a variety of Emacs commands, as well as
|
|
|
|
a unified interface for project search and replace, powered by ag, rg, pt,
|
|
|
|
git-grep & grep (whichever is available).
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2017-08-21 20:07:07 +02:00
|
|
|
#+begin_quote
|
2017-12-31 23:07:28 -05:00
|
|
|
I prefer ivy over ido for its flexibility. I prefer ivy over helm because it's
|
2019-01-03 02:12:50 -05:00
|
|
|
lighter, simpler and faster in many cases.
|
2017-08-21 20:07:07 +02:00
|
|
|
#+end_quote
|
2017-05-25 20:08:50 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
** Module Flags
|
2019-05-29 00:01:45 +10:00
|
|
|
+ =+fuzzy= Enables fuzzy completion for Ivy searches.
|
|
|
|
+ =+prescient= Enables prescient filtering and sorting for Ivy searches.
|
2019-01-03 02:12:50 -05:00
|
|
|
+ =+childframe= Causes Ivy to display in a floating child frame, above Emacs.
|
|
|
|
*This requires GUI Emacs 26.1+*
|
2019-04-25 22:18:17 -04:00
|
|
|
+ =+icons= Enables file icons for switch-{buffer,project}/find-file counsel
|
|
|
|
commands.
|
2019-01-03 02:12:50 -05:00
|
|
|
|
|
|
|
** Plugins
|
|
|
|
+ [[https://github.com/abo-abo/swiper][ivy]]
|
|
|
|
+ [[https://github.com/abo-abo/swiper][counsel]]
|
|
|
|
+ [[https://github.com/ericdanan/counsel-projectile][counsel-projectile]]
|
|
|
|
+ [[https://github.com/abo-abo/swiper][swiper]]
|
|
|
|
+ [[https://github.com/abo-abo/swiper][ivy-hydra]]
|
|
|
|
+ [[https://github.com/yevgnen/ivy-rich][ivy-rich]]
|
|
|
|
+ [[https://github.com/mhayashi1120/Emacs-wgrep][wgrep]]
|
|
|
|
+ [[https://github.com/DarwinAwardWinner/amx][amx]]
|
|
|
|
+ [[https://github.com/lewang/flx][flx]]* (=+fuzzy=)
|
2019-05-29 00:01:45 +10:00
|
|
|
+ [[https://github.com/raxod502/prescient.el][prescient]]* (=+prescient=)
|
2019-01-03 02:12:50 -05:00
|
|
|
+ [[https://github.com/tumashu/ivy-posframe][ivy-posframe]]* (=+childframe=)
|
2019-04-25 22:18:17 -04:00
|
|
|
+ [[https://github.com/asok/all-the-icons-ivy][all-the-icons-ivy]]* (=+icons=)
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
** Hacks
|
|
|
|
+ Functions with ivy/counsel equivalents have been globally remapped (like
|
|
|
|
~find-file~ => ~counsel-find-file~). So a keybinding to ~find-file~ will
|
|
|
|
invoke ~counsel-find-file~ instead.
|
|
|
|
+ ~counsel-[arp]g~'s 3-character limit was reduced to 1 (mainly for the ex
|
|
|
|
command)
|
2017-08-21 20:07:07 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
* Prerequisites
|
|
|
|
This module optionally depends on one of:
|
2017-12-31 23:07:28 -05:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
+ [[https://github.com/BurntSushi/ripgrep][ripgrep]] (rg)
|
|
|
|
+ [[https://github.com/ggreer/the_silver_searcher][the_silver_searcher]] (ag)
|
|
|
|
+ [[https://github.com/monochromegane/the_platinum_searcher][the_platinum_searcher]] (pt)
|
2017-12-31 23:07:28 -05:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
Ripgrep is recommended, but the order of its results aren't deterministic and it
|
|
|
|
doesn't support full PCRE (at the time of writing). The_silver_searcher is a
|
|
|
|
good alternative if either of these bother you.
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
If none of these are installed, file search commands will use git-grep (falling
|
|
|
|
back to grep, otherwise).
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
** Install
|
|
|
|
*** MacOS
|
|
|
|
#+BEGIN_SRC sh
|
|
|
|
brew install ripgrep the_silver_searcher
|
|
|
|
#+END_SRC
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
*** Arch Linux
|
|
|
|
#+BEGIN_SRC sh :dir /sudo::
|
|
|
|
sudo pacman --needed --noconfirm -S ripgrep the_silver_searcher
|
|
|
|
#+END_SRC
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
* Features
|
|
|
|
Ivy and its ilk are large plugins. Covering everything about them is outside of
|
|
|
|
this documentation's scope, so only Doom-specific Ivy features are listed here:
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2017-08-21 20:07:07 +02:00
|
|
|
** Jump-to-file project navigation
|
2019-01-03 02:12:50 -05:00
|
|
|
Inspired by Sublime Text's jump-to-anywhere, CtrlP/Unite in Vim, and Textmate's
|
|
|
|
Command-T, this module provides similar functionality by bringing ~projectile~
|
|
|
|
and ~ivy~ together.
|
2017-12-31 23:07:28 -05:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
https://assets.doomemacs.org/completion/ivy/projectile.png
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
| Keybind | Description |
|
|
|
|
|----------------------+-------------------------------------|
|
|
|
|
| =SPC f /=, =SPC SPC= | Jump to file in project |
|
|
|
|
| =SPC f .=, =SPC .= | Jump to file from current directory |
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
** Project search & replace
|
|
|
|
This module provides interactive text search and replace using the first search
|
|
|
|
program available on your system (rg, ag, pt, git-grep or grep).
|
|
|
|
|
2019-06-14 12:42:29 +02:00
|
|
|
| Keybind | Description |
|
|
|
|
|-----------+---------------------------------|
|
|
|
|
| =SPC / b= | Search the current buffer |
|
|
|
|
| =SPC / p= | Search project |
|
|
|
|
| =SPC / d= | Search this directory |
|
|
|
|
| =SPC p t= | List all TODO/FIXMEs in project |
|
2019-01-03 02:12:50 -05:00
|
|
|
|
|
|
|
https://assets.doomemacs.org/completion/ivy/search.png
|
|
|
|
|
|
|
|
The ~+ivy-project-search-engines~ variable is consulted to determine which
|
|
|
|
underlying program to check for (and in what order). It's default value is ~'(rg
|
|
|
|
ag pt)~. If none of these are available, it will resort to =git-grep= (falling
|
|
|
|
back to =grep= after that).
|
|
|
|
|
|
|
|
To use a specific program, the following engine-specific commands are available
|
|
|
|
(but not bound to any key by default) for searching from the project root or the
|
|
|
|
current directory (recursively), respectively:
|
|
|
|
|
|
|
|
+ ~+ivy/ag~ / ~+ivy/ag-from-cwd~
|
|
|
|
+ ~+ivy/rg~ / ~+ivy/rg-from-cwd~
|
|
|
|
+ ~+ivy/pt~ / ~+ivy/pt-from-cwd~
|
|
|
|
+ ~+ivy/grep~ / ~+ivy/grep-from-cwd~
|
|
|
|
|
|
|
|
The universal argument (=SPC u= for evil users; =C-u= otherwise) changes the
|
|
|
|
behavior of these commands, instructing the underlying search engine to include
|
|
|
|
ignored files.
|
|
|
|
|
|
|
|
This module also provides Ex Commands for evil users:
|
|
|
|
|
|
|
|
| Ex command | Description |
|
|
|
|
|-----------------------+------------------------------------------------|
|
|
|
|
| ~:ag[!] [QUERY]~ | Search project w/ ag[fn:1] |
|
|
|
|
| ~:rg[!] [QUERY]~ | Search project w/ rg[fn:1] |
|
|
|
|
| ~:pt[!] [QUERY]~ | Search project w/ pt[fn:1] |
|
|
|
|
| ~:grep[!] [QUERY]~ | Search project w/ git-grep/grep[fn:1] |
|
|
|
|
| ~:agcwd[!] [QUERY]~ | Search this directory w/ the_silver_searcher |
|
|
|
|
| ~:rgcwd[!] [QUERY]~ | Search this directory w/ ripgrep |
|
|
|
|
| ~:ptcwd[!] [QUERY]~ | Search this directory w/ the_platinum_searcher |
|
|
|
|
| ~:grepcwd[!] [QUERY]~ | Search this directory w/ git-grep/grep |
|
|
|
|
|
|
|
|
The optional BANG functions is equivalent to the universal argument for the
|
|
|
|
previous commands.
|
|
|
|
|
|
|
|
-----
|
|
|
|
|
|
|
|
While in a search (e.g. invoked from ~+ivy:ag~ or ~:rg~), these extra
|
|
|
|
keybindings are available to you:
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-06-14 12:42:29 +02:00
|
|
|
| Keybind | Description |
|
|
|
|
|-----------+-----------------------------------------------|
|
|
|
|
| =C-c C-e= | Open a writable buffer of your search results |
|
|
|
|
| =C-SPC= | Preview the current candidate |
|
|
|
|
| =M-RET= | Open the selected candidate in other-window |
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-06-14 12:42:29 +02:00
|
|
|
Changes to the resulting wgrep buffer (opened by =C-c C-e=) can be committed
|
|
|
|
with =C-c C-c= and aborted with =C-c C-k= (alternatively =ZZ= and =ZQ=, for evil
|
|
|
|
users).
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
https://assets.doomemacs.org/completion/ivy/search-replace.png
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
** In-buffer searching
|
|
|
|
The =swiper= package provides an interactive buffer search powered by ivy. It
|
|
|
|
can be invoked with:
|
|
|
|
|
|
|
|
+ =SPC / b=
|
|
|
|
+ ~:sw[iper] [QUERY]~
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-01-03 02:12:50 -05:00
|
|
|
https://assets.doomemacs.org/completion/ivy/swiper.png
|
2017-05-10 14:14:10 +02:00
|
|
|
|
2019-06-14 12:42:29 +02:00
|
|
|
A wgrep buffer can be opened from swiper with =C-c C-e=.
|
2019-01-03 02:12:50 -05:00
|
|
|
|
|
|
|
** Task lookup
|
|
|
|
Some projects have TODO's and FIXME's littered across them. The ~+ivy/tasks~
|
|
|
|
command allows you to search and jump to them. It can be invoked with:
|
|
|
|
|
|
|
|
+ =SPC p t= (C-u = restrict search to current file)
|
|
|
|
+ ~:todo[!]~ (BANG = restrict search to current file)
|
|
|
|
|
|
|
|
https://assets.doomemacs.org/completion/ivy/todo.png
|
|
|
|
|
|
|
|
** Ivy integration for various completing commands
|
|
|
|
*** General
|
|
|
|
| Keybind | Description |
|
|
|
|
|----------------+---------------------------|
|
|
|
|
| =M-x=, =SPC := | Smarter, smex-powered M-x |
|
|
|
|
| =SPC '= | Resume last ivy session |
|
|
|
|
|
|
|
|
*** Jump to files, buffers or projects)
|
|
|
|
| Keybind | Description |
|
|
|
|
|---------------------------------+---------------------------------------|
|
|
|
|
| =SPC RET= | Find bookmark |
|
|
|
|
| =SPC f .=, =SPC .= | Browse from current directory |
|
|
|
|
| =SPC f /=, =SPC p /=, =SPC SPC= | Find file in project |
|
|
|
|
| =SPC f r= | Find recently opened file |
|
|
|
|
| =SPC p p= | Open another project |
|
|
|
|
| =SPC b b=, =SPC ,= | Switch to buffer in current workspace |
|
|
|
|
| =SPC b B=, =SPC <= | Switch to buffer |
|
|
|
|
|
|
|
|
*** Search
|
2019-06-14 12:42:29 +02:00
|
|
|
| Keybind | Description |
|
|
|
|
|-----------+------------------------------------------|
|
|
|
|
| =SPC / i= | Search for symbol in current buffer |
|
|
|
|
| =SPC / I= | Search for symbol in all similar buffers |
|
|
|
|
| =SPC / b= | Search the current buffer |
|
|
|
|
| =SPC / p= | Search project |
|
|
|
|
| =SPC / d= | Search this directory |
|
|
|
|
| =SPC p t= | List all TODO/FIXMEs in project |
|
2019-01-03 02:12:50 -05:00
|
|
|
|
|
|
|
* Configuration
|
|
|
|
** TODO Enable fuzzy/non-fuzzy search for specific commands
|
|
|
|
** TODO Change the position of the ivy childframe
|
|
|
|
|
|
|
|
* TODO Troubleshooting
|