ソースコードの各行の末尾に空白文字があると精神衛生上良くないので消す派です.常に消しておくようにすると,VCSのdiffにノイズが乗らなくて良いと思います.
そこで僕は以下のようにVimを設定して対応しています.
以下のようにすると,保存時にフックして末尾の空白を削除出来るようになります.
また,:ToggleRemoveTrailingWhiteSpace
というコマンドを実行すると,
フックして削除するか否か,という状態をトグルさせることが出来ます.
色々な理由で *1 末尾空白を消したくない時にはトグルして機能を一時的に殺すと良いでしょう.
Markdownは末尾に半角スペースを2発入れる事によってブロック内での改行を行う仕様となっているため,
自動的に半角スペースを削除されると具合が悪いことになります.
従って,以下の設定ではMarkdownの編集時には常にdisabledになるようにしています.
" 保存時にフックして常に末尾の空白を削除する let g:does_remove_trailing_white_space = 1 au MyAutoCmd BufWritePre * call s:removeTrailingWhiteSpace() func! s:removeTrailingWhiteSpace() if &ft != 'markdown' && g:does_remove_trailing_white_space == 1 :%s/\s\+$//ge endif endf " `:ToggleRemoveTrailingWhiteSpace` というコマンドを実行すると " 保存時にフックして空白を削除するか否かをトグル command! -nargs=0 ToggleRemoveTrailingWhiteSpace \ call s:toggleRemovingTrailingWhiteSpaceStatus() func! s:toggleRemovingTrailingWhiteSpaceStatus() let g:does_remove_trailing_white_space = \ !g:does_remove_trailing_white_space endfunc
また,以下のようにすると末尾の空白文字を真っ赤にハイライトすることが出来るため,可視化が捗って便利.
おまけでハードタブにもささやかに色を付けたりなどしています.
highlight TrailingSpaces ctermbg=red guibg=#FF0000 highlight Tabs ctermbg=black guibg=#000000 au BufNewFile,BufRead * call matchadd('TrailingSpaces', ' \{-1,}$') au BufNewFile,BufRead * call matchadd('Tabs', '\t')