Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

Is there a .vimrc setting to automatically remove trailing whitespace when saving a file?

Ideally (to be safe) I would like to only have this functionality for certain files, e.g. *.rb

share|improve this question
add comment

3 Answers 3

up vote 4 down vote accepted

This works (in the .vimrc file) for all files:

autocmd BufWritePre * :%s/\s\+$//e

This works for just ruby(.rb) files:

autocmd BufWritePre *.rb :%s/\s\+$//e
share|improve this answer
    
This is also what I use. –  bahamat May 11 '13 at 17:57
add comment

To keep cursor position use something like:

function! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun

else cursor would end up at beginning of line of last replace after save.

Example: You have a space at end of line 122, you are on line 982 and enter :w. Not restoring position, would result in cursor ending up at beginning of line 122 thus killing work flow.

Set up call to function using autocmd, some examples:

" Using file extension
autocmd BufWritePre *.h,*.c,*.java :call <SID>StripTrailingWhitespaces()

" Often files are not necessarily identified by extension, if so use e.g.:
autocmd BufWritePre * if &ft =~ 'sh\|perl\|python' | :call <SID>StripTrailingWhitespaces() | endif

" Or if you want it to be called when file-type i set
autocmd FileType sh,perl,python  :call <SID>StripTrailingWhitespaces()

" etc.

One can also use, but not needed in this case, getpos() by:

let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)

" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")
share|improve this answer
    
Ah, thanks @ChrisDown, can't believe how many times I manage to spell that wrong. It follows me like a plague. –  Sukminder May 11 '13 at 16:54
add comment

My DeleteTrailingWhitespace plugin does this and, in contrast to the various simple :autocmds floating around, also handles special cases, can query the user, or abort writes with trailing whitespace.

The plugin page contains links to alternatives; there's also a large discussion on the Vim Tips Wiki.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.