Michael Hunsinger has a very nice tutorial on using Ivy and the associated packages Counsel and Swiper. I’ve been an ardent user of these packages ever since Mike Zamansky turned me onto them with this video.
In addition to user-level interactions with Ivy, Hunsinger shows how to use them to provide powerful commands using an absolute minimum of Elisp. Even someone who’s not a Lisp programmer can probably program up a custom command by following Hunsinger’s template.
The only thing I’d add to Hunsinger’s post is how select the input text rather than one of the suggestions. That happens fairly often for me when I want to open a new file whose name matches one or more existing files that Ivy is suggesting. The answer (Ctrl+Meta+j) is simple but definitely not obvious.
If you’re not already using Ivy/Counsel/Swiper, take a look at Hunsinger’s post. It may convince you to give them a try.