Vim Tips Wiki
Tip 610 Printable Monobook Previous Next

created 2003 · complexity intermediate · version 6.0

Vim can expand abbreviations entered while in insert mode. An abbreviation is defined by adding a line like the following to your vimrc:

iabbrev <keys> <expansion>

Replace <keys> with the letter or letters which should be expanded to <expansion>, for example:

iabbrev #i #include (typing "#i" and space will be expanded to "#include")
iabbrev #d #define  (typing "#d" and space will be expanded to "#define")
iabbrev s struct    (typing "s" and space will be expanded to "struct")
iabbrev t typedef   (typing "t" and space will be expanded to "typedef")

In some cases Vim expands a letter automatically that you don't want. You have to watch out for that.

When entering a word which is already in the buffer, Ctrl-P or Ctrl-N can be used to autocomplete the word currently being entered. Autocompletion does not require abbreviations to have been defined, but it only works for a word consisting of characters matching the 'iskeyword' option.

If wanted, dictionary completion can used to define words that can be autocompleted. For example, with the following settings, Ctrl-P or Ctrl-N will work with words defined in the specified dictionary file:

:set complete+=k
:set dictionary+=/your/dict/file


You can put your common typos as abbreviations, for auto correction:

iabbrev teh the
iabbrev seperate separate

> How cut the space from the resulted substitution?

From :help abbreviations: An exception to this is the character <C-]> (Ctrl-]), which is used to expand an abbreviation without inserting any extra characters.


:iabbrev hh hello
    "hh<Space>" is expanded to "hello<Space>"
    "hh<C-]>" is expanded to "hello"

Use getchar() to eat up that space, for example:

iabbrev <t <target name="%"></target><Esc>F%s<c-o>:call getchar()<CR>

Regarding how to eat the last typed character (when it is a space): Use :Iabbr and :Inoreabbr from script#50.

See the SuperTab plugin. It does almost all of this without the need for programming.

To eat the last space, for example, with:

iabbrev did <div id="

In insert mode, type did then press Ctrl-]

Result: The abbreviation is expanded with no extra characters, and you are still in insert mode and can continue typing.