Add compltion/ivy/README.org

This commit is contained in:
Henrik Lissner 2017-05-10 14:14:10 +02:00
parent 5129511510
commit 7a939a945b
2 changed files with 105 additions and 4 deletions

View file

@ -5,7 +5,7 @@
+ [-] Work-in-progress
+ [X] Complete
** Planned [5/78]
** Planned [6/80]
+ [0/10] Potential plugins
+ [ ] [[https://github.com/emacs-lsp/lsp-mode][lsp-mode]]: client for MS Language Server Protocol, keep an eye on this
+ [ ] lang/javascript: [[https://github.com/codesuki/add-node-modules-path][add-node-modules-path]] (adds node_modules to ~exec-path~)
@ -24,7 +24,7 @@
+ [ ] app/irc
+ [-] app/crm
+ [-] app/write
+ [5/58] Add README.org's (with working babel blocks?) to modules (see [[modules/lang/go/README.org][lang/go/README.org]]) to replace bootstaps
+ [6/58] Add README.org's (with working babel blocks?) to modules (see [[modules/lang/go/README.org][lang/go/README.org]]) to replace bootstaps
+ [0/9] :tools
+ [ ] dired
+ [ ] electric-indent
@ -78,8 +78,8 @@
+ [ ] doom-modeline
+ [ ] doom-quit
+ [ ] hl-todo
+ [0/4] :completion
+ [ ] ivy
+ [1/4] :completion
+ [X] ivy
+ [ ] company
+ [ ] ido
+ [ ] helm

View file

@ -0,0 +1,101 @@
* completion/Ivy
Ivy is my completion backend of choice (over ido and helm), for its speed and
simplicity. With ivy's help and some hackery, I get the following features:
+ Project-wide search & replace.
+ Project jump-to navigation ala Command-T, Sublime Text's Jump-to-anywhere or Vim's CtrlP plugin.
+ Ivy integration for ~M-x~, ~imenu~, ~recentf~ and others.
+ A powerful, interactive in-buffer search using ~swiper~.
+ Ivy-powered TODO/FIXME navigation
** Dependencies
This module depends only on [[https://github.com/BurntSushi/ripgrep][ripgrep]].
*** MacOS
#+BEGIN_SRC sh :tangle (if (doom-system-os 'macos) "yes")
brew install ripgrep
#+END_SRC
*** Arch Linux
#+BEGIN_SRC sh :dir /sudo:: :tangle (if (doom-system-os 'arch) "yes")
sudo pacman --needed --noconfirm -S ripgrep
#+END_SRC
** Highlights
*** Search & Replace
A project-wide search can be performed by invoking ~counsel-rg~ or via the ex
command (evil-mode): ~:find~.
[[/../screenshots/modules/completion/ivy/ivy-search.gif]]
From this session, you can press =Shift + Tab= to create an writeable occur
buffer in wgrep mode.
[[/../screenshots/modules/completion/ivy/ivy-search-replace.gif]]
Make your modifications and press =C-c C-c= to commit them, or =C-c C-k= to
abort.
*** Jump-to-file project navigation
Inspired by Sublime Text's jump-to-anywhere, Vim's CtrlP or Unite plugins, and
Textmate's Command-T, a marriage of ~projectile~ and ~ivy~ makes this available
to you in Emacs. Invoke it with =, /= or ~counsel-projectile-find-file~.
[[/../screenshots/modules/completion/ivy/ivy-projectile.gif]]
*** In-buffer searching
I prefer to use ~evil-search~ (invoked by pressing =/= in normal mode) when
jumping small/moderate (or predictable) distances. On occasion I need more
feedback, so I turn to ~swiper~ (available directly with =M-x swiper RET=, or
via ~:sw[iper]~).
[[/../screenshots/modules/completion/ivy/ivy-swiper.gif]]
*** TODO-Task lookup
I sprinkle my projects with TODO's & FIXME's. Using ivy and ripgrep, I wrote
~+ivy/tasks~ to help me navigate to them. It can be invoked via ~:todo[!]~ as
well.
[[/../screenshots/modules/completion/ivy/ivy-todo.gif]]
** Appendix
*** Commands & Keybindings
Here is a list of my commonly used commands, their default keybinds (defined in
[[../../private/hlissner/+bindings.el][private/hlissner/+bindings.el]]), and their corresponding ex command (defined in
[[../../private/hlissner/+commands.el][private/hlissner/+commands.el]]).
| command | key / ex command | description |
|-------------------------------------+-------------------------+-----------------------------------------------------------|
| ~counsel-M-x~ | =M-x= | Smarter, smex-powered M-x |
| ~counsel-bookmark~ | =, b= | Find bookmark |
| ~counsel-find-file~ | =, .= | Browse from current directory |
| ~counsel-projectile-find-file~ | =, /= | Find file in project |
| ~counsel-projectile-switch-project~ | =, p= | Open another project |
| ~counsel-recentf~ | =, r= | Find recently opened file |
| ~+ivy/switch-buffer~ | =, ,= | Jump to open buffer in current workspace |
| ~+ivy/switch-workspace-buffer~ | =, <= | Jump to open buffer across workspaces |
| ~+ivy:file-search~ | ~:f[in]d[!] [QUERY]~ | Search project (if BANG, don't respect gitignore) |
| ~+ivy:file-search-cwd~ | ~:f[in]dcwd[!] [QUERY]~ | Search project in cwd (if BANG, don't respect gitignore) |
| ~+ivy:swiper~ | ~:sw[iper] [QUERY]~ | Search current buffer |
| ~+ivy:todo~ | ~:todo[!]~ | List all TODO/FIXMEs in project (or current file if BANG) |
While in an ~counsel-rg~ search (e.g. invoked from ~+ivy:file-search~), these
new keybindings are available to you:
| key | description |
|-------------+--------------------------------------------------------------------------------|
| =<backtab>= | Perform search/replace on the search results (open occur buffer in wgrep mode) |
| =C-SPC= | Preview the current candidate |
| =M-RET= | Open the selected candidate in other-window |
*** Hacks
+ Where possible, functions with ivy/counsel equivalents have been remapped
(like ~find-file~ => ~counsel-find-file~). So a keybinding to ~find-file~ will
invoke ~counsel-find-file~ instead.
+ ~counsel-rg~'s 3-character limit was reduced to 1 (mainly for the ex command)
+ ~counsel-rg~'s parentheses quoting behavior was reversed. Now, if you
want literal parentheses, you must escape them: e.g. ~\(match\)~ is literal,
~(match)~ is a regexp group.