2

I want all redundant whitespaces to be removed on write/save. How can I do that? By redundant I mean ones that exists after the last character or if there's an empty line and it contains a few whitespaces.

Kolayn
  • 133
  • 1
  • 2
  • 5

2 Answers2

5

Probably something like that should work:

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

The autocommand triggers :%s/\s\+$// each time a buffer will be written. And the substitution command removes all of the whitespaces at the end of lines.

statox
  • 49,782
  • 19
  • 148
  • 225
3

I have a function for this, which also saves the cursor position:

function! <SID>StripTrailingWhitespaces()
  " save last search & cursor position
  let _s=@/
  let l = line(".")
  let c = col(".")
  %s/\s\+$//e
  let @/=_s
  call cursor(l, c)
endfunction

This function can be called on the writepre hook:

autocmd BufWritePre *.rb,*.php,*.py,*.js,*.txt,*.hs,*.java,*.md call <SID>StripTrailingWhitespaces()

Or if you want it on every file:

autocmd BufWritePre * call <SID>StripTrailingWhitespaces()

Note: I have not written this function, but copied it from somewhere. Unfortunaly i don't remember where i found it. As pointed out in the comments, the source is probably vimcast (link). So even if it doesn't matter for you, i don't want to take credit for this function, and vimcast can't be mentioned enough, as it is a great source for vim related knowledge.

B.G.
  • 1,116
  • 7
  • 18