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


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

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

This works (in the .vimrc file) for just ruby(.rb) files:

autocmd BufWritePre *.rb :%s/\s\+$//e
| improve this answer | |
  • 7
    This solution's nice, but I think @Sukminder's solution below is better, because it repositions the cursor correctly. – hlin117 Mar 19 '15 at 20:41
  • What does that the lastet e use? – acgtyrant Dec 28 '15 at 5:55

To keep cursor position use something like:

function! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    call cursor(l, c)

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(".")
| improve this answer | |

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.

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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