Converting between tabs and spaces

The command for converting between tabs and spaces is:

: retab !

More specifically, to convert tabs to spaces, run:

: set expandtab : retab !

And to convert spaces to tabs, run:

: set noexpandtab : retab !

Strip trailing whitespace

Strip trailing spaces throughout an entire file by running this substitution command:

: % s /\s\+$/ / e

This has a couple of side-effects: it moves your cursor, and sets the last item in your search history to trailing whitespace. This function gets around these problems:

function ! < SID > StripTrailingWhitespaces () " Preparation: save last search, and cursor position. let _s = @/ let l = line ( "." ) let c = col ( "." ) " Do the business: % s /\s\+$/ / e " Clean up: restore previous search history, and cursor position let @/ = _s call cursor ( l , c ) endfunction

Put it in your .vimrc file.

If you want to map this function to a key (e.g. F5), add this:

nnoremap < silent > < F5 > : call < SID > StripTrailingWhitespaces ()< CR >

If you want to run this command automatically when a file is saved, add this:

autocmd BufWritePre * . py , * . js : call < SID > StripTrailingWhitespaces ()

This example runs the autocommand on python and javascript files. Use this as a template, and add other filetypes to suit your needs.

Delete blank lines

You can delete all blank lines by running the following command:

: g /^$/ d

Further reading

Updates

In the comments, k00pa has posted a method based on StripTrailingWhitespaces() , which applies Vim’s autoformat command to the entire file then restores the cursor position. Jonathan Palardy has recognised that StripTrailingWhitespaces()

doesn’t do one thing, it does two (useful) things: saving the “state” and executing a command to remove the trailing whitespace.

He suggests refactoring the methods as follows:

function ! Preserve ( command ) " Preparation: save last search, and cursor position. let _s = @/ let l = line ( "." ) let c = col ( "." ) " Do the business: execute a:command " Clean up: restore previous search history, and cursor position let @/ = _s call cursor ( l , c ) endfunction nmap _$ : call Preserve ( "%s/\\s\\+$//e" )< CR > nmap _ = : call Preserve ( "normal gg=G" )< CR >

I do like his choice of key mapping as well. The underscore key is not often used, so makes for a good alternate <leader> . The $ key is practically synonymous with end of line, so it makes for a good mnemonic.

Jonathan goes into a little more detail on his blog. Go read: Preserve: A Vim function that keeps your state.