Pages

Wednesday, April 9, 2014

Some stuff sucks less.
I’ve written a lot of plugins for Vim in the… four years that I’ve
been a Vim plugin dev. Sixty five at the time of writing, by my
count. Some of them are even useful. Here are twenty of my favourite
plugins. Enjoy. :-)

Credit where due: Many of my plugins were co-written with the help
of the indefatigable Israel Chauca (better know to vimmers as the
lovable Raimondi).

Plugins are shown here in github stargazer rank, highest to lowest
in each category. It’s not much of a metric as far as I’m concerned,
but at least it’s more than just my opinion.

Sunday, April 6, 2014

Golf: A good edit ruined.

The Problems:

Vim Golf optimises on the wrong thing: keystrokes

Vim Golf demands a bare-metal Vim

Least Number of Keystrokes

Banging out thirty characters in a few seconds to solve a problem is
immeasurably better than spending several minutes contemplating the fewest
keystrokes possible to achieve the same result. The point here is, time is a
better metric to test yourself against. Can you solve this problem any faster
than the last time you tried? Perhaps since then, you’ve crafted a new map or
text-object or macro to simplify the task. Isn’t that exactly what Vimmers
should be doing? It is Bram’s key point in
Seven Habits of Effective Text
Editing suggestions, after all.

Bare-Metal Vim

EVERYONE uses a more able Vim
than what Vim Golf insists upon. Everyone has better features enabled, Useful
Plugins, and custom commands, maps and abbreviations to lighten their editing
load. I get that competition requires a level playing field, but that in turn
is hindering the competitors. Vimmers walk away from their morning on the golf
course with less than they should. They should be able to utilise
everything they practised.

Playa:

Aw… but how can I show my l33t skilz? :-(

Vimmer:

Play Vim Golf

Is There No Place for Vim Golf?

Of course there is. It has its uses. If you like playing, keep at it. I’ve seen
positive effects in some Vimmers. I implied earlier that "spending minutes
contemplating a fewer keystroke alternative" was inefficient and that you’d be
better served by sticking to a more verbose alternative that you know well. To
be clear, what I mean here is that if what you craft on the golf course is
arcane, complex and immemorable (albeit awesomely short), you will end up not
using it in your daily editing. Sure, you could try to make it a habit, but
then you run into problem #2 — don’t remember a cryptic collage of keystrokes
when Vim can do it for you, in a map, say.

Learning shorter ways to get stuff done in Vim is fun and enlightening. I know.
I’ve spent many hours on this journey too. But it is a journey; the benefit
comes from the process, not the product. Learning that there is a keystroke
that lets you type Normal Mode commands in Insert Mode is eye-opening and, at
first, spawns a desire to play with this shiny new toy. The Learned Vimmer soon
realises though that this shiny new bauble is better left in the box and only
taken out when maps are being made.

The process: discovery, assessment & assimilation.

The product: a new command that you really shouldn’t use when live-typing.

You want to learn every feature the editor offers and use the most efficient
command all the time.You will waste a lot of time learning things you will never use.

Perfect Practice Makes Perfect

I learnt that quote first-hand from the inimitable Mr Birch. I internalised it
at the time, reflect on it frequently, and counsel my own students likewise.

The point of the quote is: If you practice the wrong thing, then you’ll learn
well to do it wrong. An additional note here is that repairing a bad habit
costs more than learning good habits to begin with. The apocryphal metric
tossed about on the training floor was: it takes 50 repetitions to learn a new
move, and 200 to unlearn a bad one. Regardless of the accuracy of those
particular numbers, the phenomenon it describes is nonetheless very real.

A Better Way

Use Your Vim, Luke

Vim Golf requires that you use a crippled Vim. No. Use your Vim. You’ve grown
your ~/.vimrc with its suite of maps, abbreviations, commands and functions
designed around your Vimming habits, and you’ve installed plugins that further
enhance your editing prowess. Use them! Practice them. Cultivate them:
throw away bad ones; repair broken ones; develop new ones.Compete Against Younger You

Instead of comparing your keystroke length to that of others, you’re better off
competing against your own Personal Best times for the editing task at hand.

Method

Grab an editing task. These can come from your own experience or you can
just use those on Vim Golf.

Reflect again. How did you go? Did you improve your Personal Best time? If
not, why not? What are the time-sinks? What can you improve? Would a map help?
Or a macro? A plugin?

Macros, Such Fleeting Pleasures
Have you ever crafted an awesome macro to refactor code, or munge data into
structures, or perform a tedious operation that frequently arises in this
particular file, task or programming language, only to lose all that effort
when you close Vim? Sure, with :help 'viminfo you can have Vim persist your
registers (in which your macros are stored), but their fragile nature means
that you or any one of your plugins can overwrite them without warning.VimLocalMacros was written to solve
this problem. It stores the contents of registers inside comments within the
current file so that when you come back to the file, you can restore the
registers and have your macros at the ready without having to remember and
recreate them over and again.

Those four steps sound easy enough, right? It couldn’t get any easier! Er,
well, this is Vim. Of course it could be easier! :-) Get to the
VimGym and let it handle all that finicky
stuff, like:

VimKata was one of the very first
Vim plugins I ever worked on, and so it was therefore doomed to failure from
the outset. I didn’t have the skills necessary to tackle such a beast. I didn’t
know how to build it; I didn’t know what to focus on; I didn’t know what I
didn’t know.
VimGym is less than VimKata in some ways and therefore so very much more.

Vim Golf hobbles Vimmers by limiting them to an unrealistically featureless Vim

Vim Golf measures the wrong thing: time taken to complete the task is more
important than the number of keystrokes

Improvement in a skill comes from repeatedly attempting tasks that are at the
edge of your abilities and getting feedback on performance. Ideally this
would come from an expert, but VimGym uses the task completion time as an
acceptable fallback.

Vimmers should be adopting a Seven Habits to Effective Text Editing approach
to Vimming whereby they identify inefficiencies, craft improvements, and
exercise them to make them habitual.

Whether you choose to go it alone, stick with just VimGolf, or try VimGym too,
I wish you well on your journey.