EINVAL: Valid solutions for invalid problems

less can do even more

After writing my last post I took my own advice and reread the less(1) manpage. Surprisingly I found some new really handy tricks that were very helpful not even an hour later!

First of all, the pair matching. If the topmost displayed line (that’s the important part!) contains an opening bracket {, we can press this very key to find the matching closing bracket (}). It is displayed by placing the line with the matching } at the bottom. Similarly now we can press } to find the matching { to the closing bracket in the bottom line, and it gets shown as the topmost line. At first it feels strange and confusing but it makes sense after trying it out. I used {} in my example but the same “trick” works for () and []. We can also match a custom pair (sadly, only single-character) by pressing ctrl+alt+f followed by the opening character and then the closing character, to go to the closing character and ctrl+alt+b followed by the same thing to go back to the opening character. So even though there is no key for matching <> we can use ctrl+alt+f < > to match them.

I mentioned I found it useful in real life. It was when browsing logs that contained a JSON-like structured data. When coding I usually run my tests with ./test-suite |& less, so using the stuff built into less was much simpler than opening the same log in a “real text editor”. Nota bene, I could have easily done so by typing g|$vim - to go back to the top of the log file (g) and pipe (|) everything up to the end of the viewed text ($) with vim (vim - to make vim read its stdin). I could have omitted g and replaced $ with . to pipe just the visible portion of the log into vim if that’s the only part I needed at this time.

I also find the search (/) flags useful often, for example /^R treats the query as a plain text, with no regular expressions, while /^K only highlights the matches without changing the current position in file. I’ll leave learning the rest of the flags as an exercise to the reader.