doomemacs/modules/completion/ivy
Henrik Lissner cf2663ab7b
Bump *
bbatsov/projectile@bbcf781 -> bbatsov/projectile@46d2010
domtronn/all-the-icons.el@ed8e44d -> domtronn/all-the-icons.el@8c02280
emacsmirror/straight@fc077dd -> emacsmirror/straight@0c7c757
justbur/emacs-which-key@3642c11 -> justbur/emacs-which-key@e48e190
jwiegley/use-package@7d92536 -> jwiegley/use-package@4fb1f9a
purcell/ns-auto-titlebar@1efc30d -> purcell/ns-auto-titlebar@60273e7

+ :app
  - :app calendar
    kidd/org-gcal.el@7445058 -> kidd/org-gcal.el@2cad2d8
  - :app irc
    jorgenschaefer/circe@e5bf5f8 -> jorgenschaefer/circe@89aac22
  - :app rss
    skeeto/elfeed@d0405e6 -> skeeto/elfeed@8fb09ad
  - :app twitter
    abo-abo/avy@509471b -> abo-abo/avy@bbf1e73
+ :completion
  - :completion company
    company-mode/company-mode@5eb7d86 -> company-mode/company-mode@54f60ef
    sebastiencs/company-box@889d723 -> sebastiencs/company-box@20384f0
  - :completion helm
    emacs-helm/helm@5d224cb -> emacs-helm/helm@e9a1e53
    tumashu/posframe@922e4d2 -> tumashu/posframe@7b92a54
  - :completion ivy
    abo-abo/swiper@c6b60d3 -> abo-abo/swiper@9bb6841
    raxod502/prescient.el@b11d79b -> raxod502/prescient.el@cc289ba
    snyball/ivy-posframe@4474956 -> snyball/ivy-posframe@82a63ae
+ :checkers
  - :checkers syntax
    alexmurray/flycheck-posframe@2b3e94c -> alexmurray/flycheck-posframe@c928b5b
+ :editor
  - :editor evil
    emacs-evil/evil@2bc6ca3 -> emacs-evil/evil@1e7aa5b
    emacs-evil/evil-collection@3e62b6b -> emacs-evil/evil-collection@c136589
  - :editor fold
    seregaxvm/vimish-fold@6368523 -> seregaxvm/vimish-fold@9d12e39
  - :editor god
    emacsorphanage/god-mode@1eb6ef3 -> emacsorphanage/god-mode@ad2e674
  - :editor lispy
    abo-abo/lispy@cdaa9c7 -> abo-abo/lispy@0a9dcfd
    noctuid/lispyville@25a7012 -> noctuid/lispyville@0f13f26
  - :editor objed
    clemera/objed@e89d8da -> clemera/objed@dea5a64
  - :editor snippets
    joaotavora/yasnippet@5b1217a -> joaotavora/yasnippet@5cbdbf0
    hlissner/doom-snippets@21b7c8d -> hlissner/doom-snippets@60c57d6
  - :editor word-wrap
    emacs-straight/adaptive-wrap@1810c0e -> emacs-straight/adaptive-wrap@319db64
+ :emacs
  - :emacs dired
    purcell/diredfl@83567d0 -> purcell/diredfl@cd052df
  - :emacs ibuffer
    purcell/ibuffer-projectile@504b0ed -> purcell/ibuffer-projectile@ecbe482
    purcell/ibuffer-vc@1249c1e -> purcell/ibuffer-vc@5fa6aea
  - :emacs undo
    emacs-straight/undo-tree@5b6df03 -> emacs-straight/undo-tree@7523823
    ideasman42/emacs-undo-fu@46de023 -> ideasman42/emacs-undo-fu@c0806c1
  - :emacs vc
    magit/magit@d459e52 -> magit/magit@321214c
    pidu/git-timemachine@391eb61 -> pidu/git-timemachine@8d67575
+ :email
  + :email notmuch
    https://git.notmuchmail.org/git/notmuch@ad9c2e9 -> https://git.notmuchmail.org/git/notmuch@8776faf
    org-mime/org-mime@9f84446 -> org-mime/org-mime@9bb6351
  + :email wanderlust
    wanderlust/semi@57a948c -> wanderlust/semi@10897f0
+ :input
  - :input japanese
    skk-dev/ddskk@fe7f82b -> skk-dev/ddskk@275a831
+ :lang
  - :lang agda
    agda/agda@8eb0d01 -> agda/agda@36738c1
  - :lang cc
    Andersbakken/rtags@080cb0e -> Andersbakken/rtags@b57b360
    MaskRay/emacs-ccls@44f1fb3 -> Sarcasm/irony-mode@5f75fc0
    emacsmirror/cmake-mode@bfe85bc -> emacsmirror/cmake-mode@e58c411
  - :lang common-lisp
    joaotavora/sly@becf7b7 -> joaotavora/sly@155cb06
  - :lang coq
    ProofGeneral/PG@0f0bb2c -> ProofGeneral/PG@03e427a
    cpitclaudel/company-coq@7ec8058 -> cpitclaudel/company-coq@b096cb5
  - :lang dart
    emacs-lsp/lsp-dart@a06fc74 -> emacs-lsp/lsp-dart@437c548
  - :lang elixir
    elixir-editors/emacs-elixir@02a3922 -> elixir-editors/emacs-elixir@01b3324
  - :lang elm
    jcollard/elm-mode@7782be0 -> jcollard/elm-mode@363da4b
  - :lang emacs-lisp
    clojure-emacs/cider@9e117c2 -> clojure-emacs/cider@a89b694
    clojure-emacs/clojure-mode@da9f1ec -> clojure-emacs/clojure-mode@84ed16c
    jorgenschaefer/emacs-buttercup@e71a40f -> jorgenschaefer/emacs-buttercup@0e5eae0
    xuchunyang/elisp-demos@4cd55a3 -> xuchunyang/elisp-demos@8c97481
  - :lang erlang
    erlang/otp@3065fbf -> erlang/otp@d9bc785
  - :lang ess
    emacs-ess/ESS@3c2fb63 -> emacs-ess/ESS@1baf8bf
  - :lang fuel
    factor/factor@497d649 -> factor/factor@3fdb032
  - :lang fsharp
    fsharp/emacs-fsharp-mode@8c86e38 -> fsharp/emacs-fsharp-mode@3e41fe1
  - :lang fstar
    FStarLang/fstar-mode.el@aaaf256 -> FStarLang/fstar-mode.el@bd28cb8
  - :lang haskell
    jyp/dante@7411904 -> jyp/dante@c516bc9
  - :lang hy
    hylang/hy-mode@e2d5fec -> hylang/hy-mode@55e84ca
  - :lang idris
    idris-hackers/idris-mode@acc8835 -> idris-hackers/idris-mode@b77eadd
  - :lang java
    mopemope/meghanada-emacs@e119c7b -> mopemope/meghanada-emacs@1e41f7f
  - :lang javascript
    ananthakumaran/tide@13e7af7 -> ananthakumaran/tide@f0b6dac
    emacs-typescript/typescript.el@0fc7297 -> emacs-typescript/typescript.el@42a60e5
    mooz/js2-mode@5049e54 -> mooz/js2-mode@40aab27
  - :lang julia
    JuliaEditorSupport/julia-emacs@1c122f1 -> JuliaEditorSupport/julia-emacs@b5f5983
    tpapp/julia-repl@5fa04de -> tpapp/julia-repl@d073acb
  - :lang kotlin
    Emacs-Kotlin-Mode-Maintainers/kotlin-mode@ab61099 -> Emacs-Kotlin-Mode-Maintainers/kotlin-mode@8e6dd57
  - :lang latex
    emacs-straight/adaptive-wrap@1810c0e -> emacs-straight/adaptive-wrap@319db64
    emacs-straight/auctex@6abf890 -> emacs-straight/auctex@59e251c
    iyefrat/evil-tex@bb01576 -> iyefrat/evil-tex@06234c9
  - :lang lean
    leanprover/lean-mode@65b55b1 -> leanprover/lean-mode@6b43776
  - :lang ledger
    ledger/ledger-mode@7d78645 -> ledger/ledger-mode@805507f
  - :lang markdown
    Fanael/edit-indirect@935ded3 -> Fanael/edit-indirect@bdc8f54
    jrblevin/markdown-mode@fa9fa20 -> jrblevin/markdown-mode@ef2cb4d
    seagle0128/grip-mode@52768a0 -> seagle0128/grip-mode@281ada2
  - :lang nix
    NixOS/nix-mode@a00b3f7 -> NixOS/nix-mode@0cf1ea1
  - :lang ocaml
    ocaml-ppx/ocamlformat@27a49cc -> ocaml-ppx/ocamlformat@cd0eaa8
    ocaml/dune@66cfb3a -> ocaml/dune@daea74e
  - :lang org
    abo-abo/org-download@768716b -> abo-abo/org-download@67b3c74
    bastibe/org-journal@a6378dc -> bastibe/org-journal@a2728e2
    dzop/emacs-jupyter@785edbb -> dzop/emacs-jupyter@360cae2
    emacs-straight/org-mode@a1e5bee -> emacs-straight/org-mode@220f2b0
    hniksic/emacs-htmlize@86f22f2 -> hniksic/emacs-htmlize@4920510
    integral-dw/org-superstar-mode@1748185 -> integral-dw/org-superstar-mode@94f35c2
    oer/org-re-reveal@c548e23 -> oer/org-re-reveal@7fe39d5
    org-roam/company-org-roam@5d7ccd9 -> org-roam/company-org-roam@1132663
    org-roam/org-roam@0aa0a7c -> org-roam/org-roam@c33867e
  - :lang php
    emacs-php/php-mode@4345dfd -> emacs-php/php-mode@f4c7c69
    jwiegley/emacs-async@86aef2c -> jwiegley/emacs-async@36a1015
  - :lang plantuml
    skuro/plantuml-mode@ea45a13 -> skuro/plantuml-mode@5889166
  - :lang python
    cython/cython@0208bf2 -> cython/cython@fcfd16c
    emacs-lsp/lsp-pyright@3cf2e8f -> emacs-lsp/lsp-pyright@9603dda
    emacs-lsp/lsp-python-ms@7a502e6 -> emacs-lsp/lsp-python-ms@a884a9a
    necaris/conda.el@9d02130 -> necaris/conda.el@9f7eea1
    wbolster/emacs-python-pytest@6a3b4e5 -> wbolster/emacs-python-pytest@fc056fa
  - :lang racket
    greghendershott/racket-mode@29afd25 -> greghendershott/racket-mode@c55fd70
  - :lang rest
    pashky/restclient.el@e8ca809 -> pashky/restclient.el@ac8aad6
  - :lang ruby
    nonsequitur/inf-ruby@f3c927c -> nonsequitur/inf-ruby@9f0f79f
  - :lang rust
    brotzeit/rustic@0ec0688 -> brotzeit/rustic@75b9920
  - :lang scala
    emacs-lsp/lsp-metals@3d4d4b7 -> emacs-lsp/lsp-metals@039aa72
    hvesalai/emacs-sbt-mode@633a315 -> hvesalai/emacs-sbt-mode@4358ed8
    hvesalai/emacs-scala-mode@46bb948 -> hvesalai/emacs-scala-mode@1d08e88
  - :lang scheme
    flatwhatson/flycheck-guile@f37b614 -> flatwhatson/flycheck-guile@2940f16
    jaor/geiser@0c86289 -> jaor/geiser@adc5c4a
  - :lang solidity
    ethereum/emacs-solidity@022b315 -> ethereum/emacs-solidity@d166a86
  - :lang swift
    emacs-lsp/lsp-sourcekit@04d75b6 -> emacs-lsp/lsp-sourcekit@130f7a8
    swift-emacs/swift-mode@2ab9ea1 -> swift-emacs/swift-mode@d266fbd
  - :lang web
    fxbois/web-mode@a2badd0 -> fxbois/web-mode@60ffd87
  - :lang yaml
    yoshiki/yaml-mode@cecf4b1 -> yoshiki/yaml-mode@68fecb5
+ :term
  - :term term
    manateelazycat/multi-term@7307ddd -> manateelazycat/multi-term@017c77c
+ :tools
  - :tools ansible
    yoshiki/yaml-mode@34648f2 -> yoshiki/yaml-mode@68fecb5
  - :tools debugger
    emacs-lsp/dap-mode@85a6163 -> emacs-lsp/dap-mode@4b18543
    realgud/realgud@5b0ed08 -> realgud/realgud@332d136
    tumashu/posframe@6d604a7 -> tumashu/posframe@7b92a54
  - :tools docker
    Silex/docker.el@d6233bd -> Silex/docker.el@3773112
  - :tools editorconfig
    editorconfig/editorconfig-emacs@9a73ff7 -> editorconfig/editorconfig-emacs@9bc1343
  - :tools ein
    millejoh/emacs-ipython-notebook@ccbed30 -> millejoh/emacs-ipython-notebook@99a4718
  - :tools lookup
    jacktasia/dumb-jump@b815731 -> jacktasia/dumb-jump@0d74b2f
  - :tools lsp
    emacs-lsp/helm-lsp@5c960e7 -> emacs-lsp/helm-lsp@4263c96
    emacs-lsp/lsp-mode@edb8119 -> emacs-lsp/lsp-mode@4145a70
    emacs-lsp/lsp-ui@1f3e970 -> emacs-lsp/lsp-ui@c39ae37
    joaotavora/eglot@fb6b17e -> joaotavora/eglot@5f873d2
  - :tools magit
    magit/forge@2c48746 -> magit/forge@feee7e2
    magit/magit@798aff5 -> magit/magit@321214c
  - :tools pass
    zx2c4/password-store@07b169e -> zx2c4/password-store@06f4999
  - :tools rgb
    emacs-straight/rainbow-mode@f780ddb -> emacs-straight/rainbow-mode@fdff98b
+ :ui
  - :ui doom
    hlissner/emacs-doom-themes@8a5538e -> hlissner/emacs-doom-themes@24023de
  - :ui fill-column
    laishulu/hl-fill-column@43cb3c3 -> laishulu/hl-fill-column@5782a91
  - :ui hl-todo
    tarsius/hl-todo@3bba459 -> tarsius/hl-todo@0598b98
  - :ui hydra
    abo-abo/hydra@87873d7 -> abo-abo/hydra@112e689
  - :ui indent-guides
    DarthFennec/highlight-indent-guides@1b12c7b -> DarthFennec/highlight-indent-guides@a4f7714
  - :ui modeline
    seagle0128/doom-modeline@881e099 -> seagle0128/doom-modeline@ffbaaee
  - :ui tabs
    ema2159/centaur-tabs@9114ef4 -> ema2159/centaur-tabs@7e0332b
  - :ui treemacs
    Alexander-Miller/treemacs@644e940 -> Alexander-Miller/treemacs@027e03b
  - :ui window-select
    abo-abo/ace-window@7003c88 -> abo-abo/ace-window@c7cb315
2020-08-19 16:18:11 -04:00
..
autoload completion/ivy: show chevron on highlighted item in tty 2020-08-07 23:07:51 -04:00
config.el Make find-file-in-project faster in large projects 2020-08-13 17:02:25 -04:00
doctor.el 💥 Drop Emacs 25.x support 2019-11-08 16:02:06 -05:00
packages.el Bump * 2020-08-19 16:18:11 -04:00
README.org Fix incorrect M-RET keybind in ivy readme 2020-04-20 22:53:05 -04:00

completion/ivy

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 ripgrep.

I prefer ivy over ido for its flexibility. I prefer ivy over helm because it's lighter, simpler and faster in many cases.

Module Flags

  • +fuzzy Enables fuzzy completion for Ivy searches.
  • +prescient Enables prescient filtering and sorting for Ivy searches.
  • +childframe Causes Ivy to display in a floating child frame, above Emacs.
  • +icons Enables file icons for switch-{buffer,project}/find-file counsel commands.

Plugins

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)

Prerequisites

This module depends on:

Install

MacOS

brew install ripgrep

Arch Linux

sudo pacman --needed --noconfirm -S ripgrep

openSUSE

sudo zypper install ripgrep

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:

Jump-to navigation

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.

https://assets.doomemacs.org/completion/ivy/projectile.png

Keybind Description
SPC p f, SPC SPC Jump to file in project
SPC f f, SPC . Jump to file from current directory
SPC s i Jump to symbol in file

Project search & replace

This module provides interactive text search and replace using ripgrep.

Keybind Description
SPC s p Search project
SPC s P Search another project
SPC s d Search this directory
SPC s D Search another directory

https://assets.doomemacs.org/completion/ivy/search.png

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.

This module also provides Ex Commands for evil users:

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)

The optional `!` is equivalent to the universal argument for the previous commands.


These keybindings are available while a search is active:

Keybind Description
C-c C-o Open a buffer with your search results
C-c C-e Open a writable buffer of your search results
C-SPC Preview the current candidate
C-RET Open the selected candidate in other-window

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).

https://assets.doomemacs.org/completion/ivy/search-replace.png

In-buffer searching

The swiper package provides an interactive buffer search powered by ivy. It can be invoked with:

  • SPC s s (swiper-isearch)
  • SPC s S (swiper-isearch-thing-at-point)
  • SPC s b (swiper)
  • :sw[iper] [QUERY]

https://assets.doomemacs.org/completion/ivy/swiper.png

A wgrep buffer can be opened from swiper with C-c C-e.

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 f, SPC . Browse from current directory
SPC p f, 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

Keybind Description
SPC p t List all TODO/FIXMEs in project
SPC s b Search the current buffer
SPC s d Search this directory
SPC s D Search another directory
SPC s i Search for symbol in current buffer
SPC s p Search project
SPC s P Search another project
SPC s s Search the current buffer (incrementally)

Configuration

TODO Enable fuzzy/non-fuzzy search for specific commands

TODO Change the position of the ivy childframe

TODO Troubleshooting