¿Cómo eliminar automáticamente los espacios finales al guardar en Vi y Vim?

22

¿Existe una .vimrcconfiguración para eliminar automáticamente los espacios en blanco al guardar un archivo?

Idealmente (para estar seguro) me gustaría tener esta funcionalidad solo para ciertos archivos, por ejemplo *.rb

Michael Durrant
fuente

Respuestas:

25

Esto funciona (en el archivo .vimrc) para todos los archivos:

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

Esto funciona (en el archivo .vimrc) solo para archivos ruby ​​(.rb):

autocmd BufWritePre *.rb :%s/\s\+$//e
Michael Durrant
fuente
66
Esta solución es buena, pero creo que la solución de @ Sukminder a continuación es mejor, porque reposiciona el cursor correctamente.
hlin117
¿Qué usa eso el último e?
acgtyrant
19

Para mantener la posición del cursor use algo como:

function! <SID>StripTrailingWhitespaces()
    let l = line(".")
    let c = col(".")
    %s/\s\+$//e
    call cursor(l, c)
endfun

de lo contrario, el cursor terminaría al comienzo de la última línea de reemplazo después de guardar.

Ejemplo : tiene un espacio al final de la línea 122, está en línea 982e ingresa :w. Si no se restaura la posición, el cursor terminará al comienzo de la línea y, por lo 122tanto, se eliminará el flujo de trabajo.

Configure la llamada para funcionar usando autocmdalgunos ejemplos:

" 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.

También se puede usar, pero no es necesario en este caso, getpos () por:

let save_cursor = getpos(".")
" Some replace command
call setpos('.', save_cursor)

" To list values to variables use:
let [bufnum, lnum, col, off] = getpos(".")
Runium
fuente
2

Mi complemento DeleteTrailingWhitespace hace esto y, en contraste con los diversos elementos :autocmdsflotantes simples , también maneja casos especiales, puede consultar al usuario o anular las escrituras con espacios en blanco finales.

La página del complemento contiene enlaces a alternativas; También hay una gran discusión en Vim Tips Wiki .

Ingo Karkat
fuente