For years, I’ve noticed that grep-like commands in Emacs, including the far superior projectile-ripgrep, would become unusable when the search results included particularly long lines (on the order of thousands of characters, I believe, but I’ve never measured it).[1] The results would begin displaying as they came in, but Emacs would slow down within a second or two and then lock up. I would have to either kill the grep process and wait for a few minutes to kill the buffer or else restart Emacs entirely. I kept running into this problem at the most inopportune moments, when I was thinking about something else and absent-mindedly hit the ripgrep shortcut.

Fed up with having my work interrupted and not being able to use basic search commands in certain repositories, I delved into the details a couple of weeks ago. The same commands in the same repositories exhibited normal behaviour (a touch of delay with long lines, but no locking up) when I ran emacs -Q and installed only the relevant packages, so my configuration had to be responsible. I spent an hour haphazardly disabling modes and refreshing the results buffer to see whether something I enabled was responsible, but I couldn’t identify the culprit.

I changed tack, incrementally adding bits of my configuration to emacs -Q, and eventually found the root cause: I was setting compilation-scroll-output to t so Emacs would scroll the output as results came in. I don’t remember adding it and in fact dislike the behaviour, so I was more than happy to remove it. The problem immediately vanished. Reading the docstring carefully afterwards led me to set the variable to first-error instead, which is more desirable behaviour.

Apart from that, since I use ripgrep, I added a .rgignore file to one particular repository where this occurred time and again, and I added .rgignore to my local Git ignore file to maintain proper hygiene. That helped clean up the results so I wouldn’t encounter the problematic scenario in the first place.

  1. This tends to happen with source repositories that accumulate artefacts such as source maps and minified files—inadvisable but sadly common.