Tente alterar a parte :%s...
do seu comando automático para isso:
:call setline(1, map(getline(1,'$'), 'substitute(v:val,"\s\+$","","")'))
Eu leio o wiki e coloco isso no meu vimrc:
autocmd FileType less,sass,yml,css,html,php,twig autocmd BufWritePre <buffer> :%s/\s\+$//e
Agora o problema é sempre que eu salvo &
está quebrado: ele repete uma mistura da última substituição e a substituição. Se, por exemplo, eu faço :s/foo/bar
e, em seguida, salve, &
parece fazer :s/foo//
. Eu gostaria que fizesse :s/foo/bar/
. Como posso restaurar essa funcionalidade?
Você teria que evitar o uso de :substitute
, pois atualmente não há uma maneira fácil de salvar e restaurar a última string substituta; o :help function-undo-search
não ajuda aqui.
A maioria dos plugins (como mostrado na página Wiki referenciada) também sofrem com este problema. Uma solução alternativa seria usar call setline(substitute(getline(lnum)), '\s\+$', '', '')
em um loop em todas as linhas, mas isso é provavelmente muito mais lento que o :substitute
.
Tags vim