Saturday, May 12, 2012

Quick VIM configuration and tutorial

VIM (Vi IMproved) is a very powerful ubiquitous console-mode text editor, but unfortunately the standard configuration is not that great (being mostly compatible with older VI versions). People really do not have time to set to read a 1000 page manual to take advantage of some neat VIM features.

What most need is just a quick guide to set up VIM so that it can rival most heavy GUI editors in features. And here it is. There's also GVim, a GUI version of VIM, but IMHO the main advantage of VI is that it can run in a terminal and is very quick on remote connections, where GVim would be too slow or not installed at all.

Firstly, avoid using ancient VI version adding this to your .bashrc:

alias vi='vim'


Some useful keystrokes

Esc: return to normal mode
i: insert at current location
I: insert at start of current line
a: insert after current location (append)
A: insert after end of current line (shortcut for $a)
o: insert line below current line (open)
O: insert line above current line
s: delete character under cursor and start inserting in its place (substitute text, shortcut for xi)
S or cc: delete all text on line and start inserting in its place (substitute or change line)
.: repeats last operation
*: search forward for the next occurrence of the word under the cursor

^: go to the beginning of line
f: move the cursor to the next  location
$: go to the end of line


q: start recording following commands into a register named .
q: stop recording and save a macro. Make sure you end up in a state that allows running next iteration, e.g. same position as initial but on the next line.
@: run the macro saved in  register  times, by default 1.


Ctrl^N: complete current word with first match in text (press again to select the next match). INSERT mode only.
Ctrl^P: complete current word with last match in text (press again to select the previous match). INSERT mode only.

How to use a dictionary for word completion. E.g. I am bilingual Italian-English and I have in my .vimrc:

set dictionary=/usr/share/dict/british-english,/usr/share/dict/italian
set complete-=k complete+=k

Useful .vimrc commands

To use your mouse to move the text cursor or select, in all modes:

set mouse=a

You can still copy and paste the X primary selection by holding the shift key before selecting or middle-clicking, respectively. Your mouse wheel, if any, will work even when mouse="". If your mouse does not have a middle button, you may find the keyboard short-cut to paste (shift-ins) more convenient.

Turn on the Highlight Search option:

set hlsearch

Enable syntax highlighting:

syntax on

If you are using a dark background for your terminal you may want to:

set background=dark

Display commands or file name completion in a one-line menu at the bottom, so that you can more easily see what the options are when cycling through alternatives with the Tab key:

set wildmenu


Features you may want to toggle manually

Enable syntax highlighting if your file has the wrong extension, e.g. not .php for a PHP file:

:set syn=php


:nohlsearch
Switch off search highlighting for the current search.

:set list
Makes vim show hidden characters: '$' indicates EOL, '^I' tabspace
Toggles back to normal mode: :set nolist
Toggles: :set invlist

:set number

When creating documentation rather than source code, you may want VIM to automatically break lines for you, e.g. to have a textwidth of 70 characters:

:set tw=70


Scripts and add-ons

vimfortune - displays a VIM usage tip every time you start vim with an empty buffer. The only drawback: some tips are quite long and take time to read, but you can skip it (press q if the tip is more than one page long)


TODO
Describe:
set ts=4
set sw=4
set spell
set spl=en
syntax on
set wrap
set ai
set cindent ” for c indentation(correct spacing)

See other basic stuff here:

http://vim.wikia.com/wiki/Tutorial