¿Cómo puedo deshacerme de los espacios finales en vim sin romper &?

0

Leí la wiki y puse esto en mi vimrc:

autocmd FileType less,sass,yml,css,html,php,twig autocmd BufWritePre <buffer> :%s/\s\+$//e

Ahora el problema es cada vez que guardo &está roto: repite una mezcla de la última sustitución y la sustitución. Si, por ejemplo, lo hago :s/foo/bary luego guardo, &parece que sí :s/foo//. Me gustaría que lo hiciera :s/foo/bar/. ¿Cómo puedo restaurar esta funcionalidad?

greg0ire
fuente

Respuestas:

1

Intente cambiar la :%s...parte de su comando automático a esto:

:call setline(1, map(getline(1,'$'), 'substitute(v:val,"\\s\\+$","","")'))
Heptita
fuente
¡Muchas gracias! ¡adoptado!
greg0ire
1

Debería evitar el uso :substitute, ya que actualmente no hay una manera fácil de guardar y restaurar la última cadena de sustitución; El :help function-undo-searchno ayuda aquí.

La mayoría de los complementos (como se muestra en la página Wiki referenciada) también sufren este problema. Se usaría una solución alternativa call setline(substitute(getline(lnum)), '\s\+$', '', '')en un bucle sobre todas las líneas, pero probablemente sea mucho más lento que el :substitute.

Ingo Karkat
fuente
Probablemente no acepte su respuesta, pero +1 es muy informativo.
greg0ire