2022-01-23 20:38:27 +01:00
← [[doom-module-index: ][Back to module index ]] ! [[doom-module-issues:::completion ivy ][Issues ]] ↖ [[doom-repo:tree/develop/modules/completion/ivy/ ][Github ]] ± [[doom-suggest-edit: ][Suggest edits ]] ? [[doom-help-modules: ][Help ]]
2021-10-16 01:21:31 +02:00
--------------------------------------------------------------------------------
#+TITLE : :completion ivy
#+SUBTITLE : Yesterday's lightest search engine
2021-11-04 13:01:45 +01:00
#+CREATED : February 20, 2017
2021-10-16 01:21:31 +02:00
#+SINCE : 2.0.0
* Description :unfold:
2019-01-03 02:12:50 -05:00
This module provides Ivy integration for a variety of Emacs commands, as well as
2021-05-17 07:25:23 -07:00
a unified interface for project search and replace, powered by [[https://github.com/BurntSushi/ripgrep/ ][ripgrep ]].
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
2021-10-16 01:21:31 +02:00
** Maintainers
/This module has no dedicated maintainers./ [[doom-contrib-maintainer: ][Become a maintainer? ]]
** Module flags
- +childframe ::
Display Ivy windows in a [[https://www.gnu.org/software/emacs/manual/html_node/elisp/Child-Frames.html ][child frame ]] rather than an popup buffer. *Requires
GUI Emacs.*
- +fuzzy ::
Enable fuzzy completion for Ivy searches.
- +icons ::
Enable file icons for switch-{buffer,project}/find-file commands.
- +prescient ::
Enable prescient filtering and sorting for Ivy searches.
** Packages
- [[doom-package: ][all-the-icons-ivy ]]* if [[doom-module: ][+icons ]]
- [[doom-package: ][amx ]]
- [[doom-package: ][counsel ]]
- [[doom-package: ][counsel-projectile ]]
- [[doom-package: ][flx ]]* if [[doom-module: ][+fuzzy ]]
- [[doom-package: ][ivy ]]
- [[doom-package: ][ivy-hydra ]]
- [[doom-package: ][ivy-posframe ]]* if [[doom-module: ][+childframe ]]
- [[doom-package: ][ivy-rich ]]
- [[doom-package: ][prescient ]]* if [[doom-module: ][+prescient ]]
- [[doom-package: ][swiper ]]
- [[doom-package: ][wgrep ]]
2017-05-10 14:14:10 +02:00
2019-01-03 02:12:50 -05:00
** Hacks
2021-10-16 01:21:31 +02:00
- Functions with ivy/counsel equivalents have been globally remapped (like
2019-01-03 02:12:50 -05:00
~find-file~ => ~counsel-find-file~ ). So a keybinding to ~find-file~ will
invoke ~counsel-find-file~ instead.
2021-10-16 01:21:31 +02:00
- ~counsel-[arp]g~ 's 3-character limit was reduced to 1 (mainly for the ex
2019-01-03 02:12:50 -05:00
command)
2017-08-21 20:07:07 +02:00
2021-10-16 01:21:31 +02:00
** TODO Changelog
# This section will be machine generated. Don't edit it by hand.
/This module does not have a changelog yet./
2019-08-27 10:50:37 +02:00
2021-10-16 01:21:31 +02:00
* Installation
[[id:01cffea4-3329-45e2-a892-95a384ab2338 ][Enable this module in your ~doom!~ block. ]]
This module has only one requirement: [[https://github.com/BurntSushi/ripgrep ][Ripgrep ]], which is a hard dependency of
Doom itself, so you should already have it installed.
Otherwise, Counsel (an Ivy plugin) provides many commands to interface with a
variety of programs from [[https://github.com/junegunn/fzf ][fzf ]] to [[https://kapeli.com/dash ][Dash docsets ]] to [[https://www.passwordstore.org/ ][pass ]] and /much/ more. These
programs are optional for this module, but must be installed if you intend to
use their associated Helm command or plugin.
* TODO Usage
#+begin_quote
🔨 /This module's usage documentation is incomplete./ [[doom-contrib-module: ][Complete it? ]]
#+end_quote
[[doom-package: ][ivy ]] is a /large/ framework for completing things. Covering all its features is
not within the scope of this module's documentation, so only its highlights will
be covered here.
2017-05-10 14:14:10 +02:00
2019-12-03 22:23:05 -05:00
** Jump-to navigation
2019-01-03 02:12:50 -05:00
Inspired by Sublime Text's jump-to-anywhere, CtrlP/Unite in Vim, and Textmate's
2021-10-16 01:21:31 +02:00
Command-T, this module provides similar functionality by bringing [[doom-package: ][projectile ]] and
[[doom-package: ][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
2021-10-16 01:21:31 +02:00
| Keybind | Description |
|------------------+-------------------------------------|
| [[kbd:][SPC p f]], [[kbd:][SPC SPC]] | Jump to file in project |
| [[kbd:][SPC f f]], [[kbd:][SPC .]] | Jump to file from current directory |
| [[kbd:][SPC s i]] | Jump to symbol in file |
2017-05-10 14:14:10 +02:00
2019-01-03 02:12:50 -05:00
** Project search & replace
2019-11-18 15:05:20 -05:00
This module provides interactive text search and replace using ripgrep.
2019-01-03 02:12:50 -05:00
2021-10-16 01:21:31 +02:00
| Keybind | Description |
|---------+--------------------------|
| [[kbd:][SPC s p]] | Search project |
| [[kbd:][SPC s P]] | Search another project |
| [[kbd:][SPC s d]] | Search this directory |
| [[kbd:][SPC s D]] | Search another directory |
2019-01-03 02:12:50 -05:00
https://assets.doomemacs.org/completion/ivy/search.png
2019-12-03 22:23:05 -05:00
Prefixing these keys with 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.
2019-01-03 02:12:50 -05:00
This module also provides Ex Commands for evil users:
2019-11-18 15:05:20 -05:00
| Ex command | Description |
|------------------------+------------------------------------------------------------------|
| ~:pg[rep][!] [QUERY]~ | Search project (if ~!~, include hidden files) |
| ~:pg[rep]d[!] [QUERY]~ | Search from current directory (if ~!~, don't search recursively) |
2019-01-03 02:12:50 -05:00
2019-12-03 22:23:05 -05:00
The optional `!` is equivalent to the universal argument for the previous
commands.
2019-01-03 02:12:50 -05:00
-----
2019-12-03 22:23:05 -05:00
These keybindings are available while a search is active:
2021-10-16 01:21:31 +02:00
| Keybind | Description |
|---------+-----------------------------------------------|
| [[kbd:][C-c C-o]] | Open a buffer with your search results |
| [[kbd:][C-c C-e]] | Open a writable buffer of your search results |
| [[kbd:][C-SPC]] | Preview the current candidate |
| [[kbd:][C-RET]] | Open the selected candidate in other-window |
2017-05-10 14:14:10 +02:00
2021-10-16 01:21:31 +02:00
Changes to the resulting wgrep buffer (opened by [[kbd: ][C-c C-e ]]) can be committed with
[[kbd: ][C-c C-c ]] and aborted with [[kbd: ][C-c C-k ]] (alternatively [[kbd: ][ZZ ]] and [[kbd: ][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
2021-10-16 01:21:31 +02:00
The [[doom-package: ][swiper ]] package provides an interactive buffer search powered by ivy. It
2019-01-03 02:12:50 -05:00
can be invoked with:
2021-10-16 01:21:31 +02:00
- [[kbd: ][SPC s s ]] (~swiper-isearch~ )
- [[kbd: ][SPC s S ]] (~swiper-isearch-thing-at-point~ )
- [[kbd: ][SPC s b ]] (~swiper~ )
- ~: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
2021-10-16 01:21:31 +02:00
A wgrep buffer can be opened from swiper with [[kbd: ][C-c C-e ]].
2019-01-03 02:12:50 -05:00
** Ivy integration for various completing commands
*** General
2021-10-16 01:21:31 +02:00
| Keybind | Description |
|------------+---------------------------|
| [[kbd:][M-x]], [[kbd:][SPC :]] | Smarter, smex-powered M-x |
| [[kbd:][SPC ']] | Resume last ivy session |
2019-01-03 02:12:50 -05:00
2020-09-02 18:34:47 -04:00
*** Jump to files, buffers or projects
2021-10-16 01:21:31 +02:00
| Keybind | Description |
|------------------+---------------------------------------|
| [[kbd:][SPC RET]] | Find bookmark |
| [[kbd:][SPC f f]], [[kbd:][SPC .]] | Browse from current directory |
| [[kbd:][SPC p f]], [[kbd:][SPC SPC]] | Find file in project |
| [[kbd:][SPC f r]] | Find recently opened file |
| [[kbd:][SPC p p]] | Open another project |
| [[kbd:][SPC b b]], [[kbd:][SPC ,]] | Switch to buffer in current workspace |
| [[kbd:][SPC b B]], [[kbd:][SPC <]] | Switch to buffer |
2019-01-03 02:12:50 -05:00
*** Search
2021-10-16 01:21:31 +02:00
| Keybind | Description |
|---------+-------------------------------------------|
| [[kbd:][SPC p t]] | List all TODO/FIXMEs in project |
| [[kbd:][SPC s b]] | Search the current buffer |
| [[kbd:][SPC s d]] | Search this directory |
| [[kbd:][SPC s D]] | Search another directory |
| [[kbd:][SPC s i]] | Search for symbol in current buffer |
| [[kbd:][SPC s p]] | Search project |
| [[kbd:][SPC s P]] | Search another project |
| [[kbd:][SPC s s]] | Search the current buffer (incrementally) |
* TODO Configuration
#+begin_quote
🔨 /This module's configuration documentation is incomplete./ [[doom-contrib-module: ][Complete it? ]]
#+end_quote
2019-01-03 02:12:50 -05:00
** TODO Enable fuzzy/non-fuzzy search for specific commands
** TODO Change the position of the ivy childframe
* TODO Troubleshooting
2021-10-16 01:21:31 +02:00
/There are no known problems with this module./ [[doom-report: ][Report one? ]]
* Frequently asked questions
[[doom-suggest-faq: ][Ask a question? ]]
** Helm vs Ivy vs Ido vs Vertico
See [[id:4f36ae11-1da8-4624-9c30-46b764e849fc ][this answer ]].
* TODO Appendix
#+begin_quote
🔨 This module has no appendix yet. [[doom-contrib-module: ][Write one? ]]
#+end_quote