From helm to ivy
For the record I discovered Helm about 20 minutes into my initial foray into emacs. I ❤ Helm. I support the project on Patreon. It's great. I'm all about mastering my tools though and to do that I need to at least try other tools. Enter my attempt to switch to Ivy.
This post isn't meant to be a finished product. I'm going to try and circle back occasionally as I use Ivy for the next couple days. A few notes on my experience so far:
- I somehow had an old version of Ivy installed and when I went to install counsel I was getting weird errors. Deleting Ivy from my
elpadirectory manually cleared things up.
- Wow, by default, Ivy feels much more sparse than Helm. The first thing I had to do was figure out the "buffers list" implementation and change my
C-=binding from helm to ivy. It's definitely more spartan, but I don't think its a negative necessarily just a change.
- Ivy is just a completion package, by itself it doesn't do a ton. That's why it comes with
swiperthese are the primary interfaces to the good stuff, e.g.
counsel-agsearches your project with Silver Searcher.
- Previews are incredible! Thanks to this comment on reddit. With the
C-M-pcommands you cycle through any matches and you see the entire file in the buffer. Imagine searching for a keyword in a project and then getting to see all the glorious context as you pick through the matches without having to open every single file!
- ~~Not sure how to completely prevent a package from loading. I don't want
helmto load while I play with Ivy. The
:disabled:keyword in use-package doesn't really prevent it from being loaded, it just prevents the
use-packageform from being executed. I ended up relying on
gitand removed the lines from my .emacs and I
rm -rfthe helm package directories.~~ I looked at this again after sleeping on it. I defined two variables
simpson-helmand I check those values in my config to set up configurations depending on which packages is available. Easy enough.
- I had a epiphany about how
use-packagewill auto load any package that has a
:initkeyword. If all you have is
:configthat package won't load itself. However adding
:defer 1will load that package once emacs is idle for a second and then fire off the
:configbody. So far so good.
:disabledcomes into play even if you have a
:afterkeyword because if you have
:aftercombined with any of the "auto load" keywords above the package will try to do stuff.