VIM abbreviations and short-hand

By Vitaly Parnas

I use shorthand to mostly facilitate my handwriting, but also for typing, although the latter carries a lesser benefit with my already rapid typing speed. Nonetheless, some shorthand constructs come at substantial convenience.

The VIM text editor facilitates auto expansion of shorthand by means of abbreviations. I maintain and often modify my abbreviation set in ~/.vim/scripts/abbrev.vim, of which I demonstrate but a handful of particularly handy constructs:

iab & and
iab 1] first
iab 2] second
iab 3] third
iab 4] fourth
iab 5] fifth
iab af after
iab ag again
iab b but
iab bc because
iab c this
iab cu that
iab d from
iab k can
iab f for
iab fe for example
iab h have
iab j just
iab ja already
iab n not
iab nec necessary
iab q that
iab sm same
iab st such that
iab t the
iab T The
iab yr your
iab w with
iab wrt with respect to
iab wo without
iab wld would
iab wout without

These abbreviations, once enabled and sourced, can sometimes become a hindarance, especially given the individual characters you may want typed verbatim, or when you purposely intend to render the abbreviated form.

On a case-by-case basis, you can prevent expansion via the CTRL-v combination as you type.

Now, to temporarily disable and toggle the abbreviation mode, you must disable the ‘conveniently’ titled paste mode in Vim. I map the toggling of this mode via F10:

" note: expandtab gets disabled when paste mode is off, hence the reset
nmap <F10> :echo "toggling abbreviations (and paste mode)" \| 
    setlocal paste! \| setlocal expandtab <CR>

However, the title is not without merit. The paste mode exists to avoid a rather nasty side effect.

With the mode disabled (as by default), any abbreviations pasted into the VIM buffer expand. This I find exceptionally frustrating as I paste bits of code or configuration files, not careful to double check the pasted content (who does?). Only later do I detect the discrepancy. To avoid this mess, enable paste mode via the above macro.

Questions, comments? Connect.