completion/helm
Description
This module provides Helm 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.
Ivy is considered a first-class citizen in Doom, however it is still possible to use Helm if you so desire.
Module Flags
+fuzzy
Enables fuzzy completion for Helm searches.+childframe
Causes Helm to display in a floating child frame, above Emacs.+icons
Enables icons (supports bothall-the-icons
andtreemacs
icons)
Plugins
- helm
- helm-rg
- helm-c-yasnippet
- helm-company
- helm-describe-modes
- helm-projectile
- helm-swiper
- helm-descbinds
- helm-flx* (
+fuzzy
) - helm-posframe* (
+childframe
) - helm-org* (
:lang org
) - helm-icons* (
+icons
)
Prerequisites
This module depends on:
- ripgrep (rg)
Install
MacOS
brew install ripgrep
Arch Linux
sudo pacman --needed --noconfirm -S ripgrep
openSUSE
sudo zypper install ripgrep
Features
Much like Ivy, Helm is a large framework and as such covering everything is not in scope, however a number of Doom-specific features are shown below:
Jump-to navigation
Similar to Ivy, this module provides an interface to
navigate within a project using projectile
:
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 also provides interacetive text search and replace using ripgrep
Search
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 |
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.
Replace
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).
In-buffer searching
The swiper
package provides an interactive buffer search powered by helm. 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]
A wgrep buffer can be opened from swiper with C-c C-e
.
Helm integration for various completing commands
Helm also has a number of overrides for built-in functionality:
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
Icons
Icons are now included, and support 2 providers (all-the-icons and treemacs).
By default, to maintain consistency we use all-the-icons
; however if you wish
to modify this you can do so using the below snippet:
(after! helm
(setq helm-icons-provider 'treemacs))