From helm to ivy
I started playing around with Ivy earlier today. I was motivated in part by reading through the author's blog, oremacs. I also love his swiper plugin and figured I had to give Ivy a try.
Background
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.
Progress
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
counselandswiperthese 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-nandC-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 theuse-packageform from being executed. I ended up relying ongitand removed the lines from my .emacs and Irm -rfthe helm package directories.~~ I looked at this again after sleeping on it. I defined two variablessimpson-evilandsimpson-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-packageworks.use-packagewill auto load any package that has a:bind,:mode,:command, or: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.