Mickey’s getting into VimGolf mode with another solution to a VimGolf Challenge. I was looking at this same challenge for a possible post but Mickey beat me too it and with a very nice strategy. The challenge is to take a multi-line list of words and transpose it. Specifically, take
ultricies, vehicula, felis, sed, auctor, aenean, euismod, semper, quam, dapibus nibh, consequat, consequat, maecenas, sit, amet, mauris, justo, quis, porttitor curabitur, pharetra, euismod, orci, sit, amet, ullamcorper, mi, tincidunt, et vitae, lorem, at, mi, feugiat, convallis, ac, eget, dui, fusce blandit, iaculis, nulla, sit, amet, dolor, nec, est, ornare, volutpat
and turn it into
ultricies nibh curabitur vitae blandit vehicula consequat pharetra lorem iaculis felis consequat euismod at nulla sed maecenas orci mi sit auctor sit sit feugiat amet aenean amet amet convallis dolor euismod mauris ullamcorper ac nec semper justo mi eget est quam quis tincidunt dui ornare dapibus porttitor et fusce volutpat
Mickey tends to concentrate more on technique than minimal keystrokes, which makes his solutions more useful outside of the narrow confines of VimGolf in Emacs. Still, it’s nice to see how efficient we can be in keystrokes if only to keep those Vim people in their place. Here, then, is my solution to the problem, which follows Mickey’s general strategy.
It helps to start off in an Org mode buffer because a shortcut key sequence for org-table-convert-region
is available. Unfortunately, there is not shortcut for org-table-transpose-table-at-point
but we can save a bunch of keystrokes with smex
.
【Ctrl+x h】 | mark buffer |
【Ctrl+c |】 | turn region into table |
【Meta+x】 o-t-t-t-a-p 【Return】 |
transpose table |
【Meta+<】 | beginning of buffer |
【Ctrl+Meta+%】 | query regexp replace |
| \| +|$ 【Return】 |
replace |’s and surrounding spaces |
【Return】 | with nothing |
! |
replace all |
That’s 30 keystrokes, which isn’t bad. The best Vim solution was 29 (with the usual rules about not counting saving the buffer) so we’re desperately in need of someone to shave off another stroke if we want to keep the Vimers from getting too smug. Of course someone could complain that smex
isn’t part of stock Emacs but it really should be and since every serious Emacs user has it installed, I don’t think it’s breaking the rules—too much—to allow it.