Vim Tips Wiki
Register
Advertisement
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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

Comments

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.

Example:

: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.


Advertisement