Vim's creator, Bram Moolenaar, says his 2 favorite features of vim are macros and the "dot repeat" command.
I can appreciate why. No other editor seems to have macros that are as easy to use (Except Emacs, of course. It can even emulate vim's macros).
I use NeoMutt as my mail client. I even gave them their tagline, "Teaching an old dog new tricks".
Today, I decided to see if I could contribute to the project with code rather than prose, despite not knowing C.
One task that needed to be done was internationalizing strings. This amounts to essentially wrapping each string in parentheses and prefixing them with an underscore and another set of parentheses.
Thanks to a combination of features from 2 very handy tools,
ag, I was able to do this in about 15 minutes.
The first step was to normalize all strings that were already internationalized by wrapping them in parentheses. I used a regular expression to find them, opened them up in Vim, and used the quickfix list and a macro to modify them.
Vim has a feature called the quickfix list which is just a bunch of
marked lines that you can jump between, usually for compiler errors.
However, tools like
grep can print their search results in a
way that's compatible with a quickfix list, and you can jump between
your search results and change each one. Since it will jump you to the
exact line and column where each match starts, it's easy to operate on
The next step was to wrap the remaining strings as described above. I
used a regular expression to find them,
ag's ability to print out the
results in a way that vim's quickfix list could consume, and another
macro to actually do the wrapping.
I used a macro that essentially jumped to the opening quote of the
string in question, wrapped it, and then jumped to the next string. Then
it was just a matter of typing
1376@@ (that's how many matches there
And that's how you can make a pull-request by just using powerful but simple tools together.