About 15 months ago, I wrote a post, Some Oldies but Goodies, that talked about some of the packages that I found most useful in my day-to-day work. On rereading that post, I find that it’s aged well in the sense that the packages I talked about are still important parts of my workflow. In particular, abo-abo’s define-word and Steve Purcell’s whole-line-or-region packages remain two of my most used packages. Each of them gets invoked several times a day.
Of course, there’s always more to learn about Emacs and new packages are being added everyday so I thought I should talk about some of the packages I’m using now that have become important for my workflow. This time I have 9 packages to discuss so I’ll break the post into two parts. As I did in the original post, I’ll point back to the post that originally discussed them.
By far, the package that’s had the most impact on my workflow is the Ivy/Swiper/Counsel suite. I really love these packages. They’ve completely replaced isearch, ido, and smex in my workflow. The modified regular expression selection that Ivy implements takes a day or two to get used to but I’ve found it’s much more useful than normal regular expression search (which is still available, of course). If I could have only one package—suite really—this would be it. If you’re not using it, you owe it to yourself to check it out. Mike Zamansky’s post and video is a good place to start. I show my current configuration below but I also use other counsel functions by calling them with Meta+x.
(use-package swiper :ensure t :diminish ivy-mode :bind (("C-s" . swiper) ("C-c C-r" . ivy-resume) ("M-x" . counsel-M-x) ("C-x C-f" . counsel-find-file) ("C-M-i" . complete-symbol) ("C-." . counsel-imenu) ("C-c 8" . counsel-unicode-char) ("C-c v" . ivy-push-view) ("C-c V" . ivy-pop-view) ("M-y" . counsel-yank-pop)) :config (ivy-mode 1) (setq ivy-use-virtual-buffers t) (setq ivy-count-format "%d/%d "))
For years I’ve been taking Steve Yegge’s advice and using search for navigation. My use of
isearch for that has almost entirely been replaced by abo-abo’s Avy library that provides (or, really, powers) a replacement for
ace-jump-mode. I tend to edit as I write so I’m always jumping around in the buffer. Avy makes that almost painless. This is another package that I use constantly everyday. Avy also provides
ace-window, which is just what you need if you have more than two windows open and need to switch among them easily. The Avy library powers other useful tools as well. If you’re not already using it, take a look at its GitHub page.
If you’re using Emacs for coding, something like TAGS is really useful for quickly jumping to a function or variable definition even if it’s in another file. I’ve never been able to warm up to TAGS systems because they are hard to maintain. You have to take steps to regenerate your TAGS file every time you make a change to any of the covered files. Then I found dumb-jump. It’s just perfect for me. There’s nothing to maintain and it’s very fast. If you’ve resisted using a TAGS system because of the hassle of dealing with the TAG file, take a look at dumb-jump.
Another package I resisted installing for a long time is PDF Tools. I finally decided to give it a try after reading Piotr Limanowski’s post on Reading for Programmers. I really liked the way he used the Interleave package to take notes while reading a PDF paper. Even without Interleave, PDF Tools is a substantial improvement on the default DocView. It’s fast and you can make annotations directly to the PDF. If you interact with PDFs, this package is definitely worth a look.
In the second part, I’ll take a look at 5 other packages that are making my workflow easier.