VIM hints & tips

My favourite editor is VIM. It's a bit weird if you've never worked with it, but once you get to know it VIM is really the perfect editor. For me at least ;-)

One of the beauties of VIM is that it can be extended and configured to your heart's content. Below you'll find some of those configurations I use to make my VIM experience a better one.

For those who want to see my entire config (and for me when I want easy access to it), I've put my entire vimrc online.

Rewrapping text

If you ever edited text and still wanted to make your lines break at about 70 characters, you know it's sometimes needed to "rewrap" the lines to make them fill those 70 characters again.

VIM has the ideal solution for this. Select a block of text and press gq. Instant rewrap! This even "understands" basic things like dashed lists, indentation of a block of text, and even Usenet quotation marks like '>'.

To rewrap the current paragraph, press gq}. Since this is a bit tiresome, I remapped this to q in my ~/.vimrc:

map q gq}

Switching between windows

If you have multiple windows open, you can switch between them using ^W keycombos. What I wanted was a command that says "Switch to the other window à la ^W^W, but maximize the target window too". This was easily done with the following mapping:

map <c-w><c-e> <c-w><c-w><c-w>_<cr>

Irritating Python comments

Python is my favourite programming language. In this language, proper indentation is incredibly important. The automatic indenter however messes up the comments, since it wants to put the '#' sign at the beginning of the line. This is good for C programmers, but not for Python. To fix this, I set the 'smartindent' variable, and use a little trick:

autocmd BufRead *.py set smartindent inoremap # X<c-h>#

Change directory to the opened file

Often, I want to change the current directory to the one a file I open is in. This is really easily done, but remember that it works on all files - helpfiles too!

autocmd BufRead * cd %:p:h

Pasting

When run in a terminal, vim (as opposed to gvim) doesn't know when you're pasting. If you paste text that's indented, it'll cause a "stairs effect". To prevent this and other annoying side-effects of pasting, type ":set paste". When you're done pasting, type ":set nopaste".