Come rimuovere automaticamente gli spazi finali durante il salvataggio in Vi e Vim?


22

Esiste .vimrcun'impostazione per rimuovere automaticamente gli spazi vuoti finali quando si salva un file?

Idealmente (per sicurezza) vorrei avere questa funzionalità solo per determinati file, ad es *.rb

Risposte:


25

Funziona (nel file .vimrc) per tutti i file:

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

Funziona (nel file .vimrc) solo per i file ruby ​​(.rb):

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

6
Questa soluzione è carina, ma penso che la soluzione di @ Sukminder qui sotto sia migliore, perché riposiziona il cursore correttamente.
hlin117,

Che cosa eusa quel lastet ?
acgtyrant il

19

Per mantenere la posizione del cursore usare qualcosa come:

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

altrimenti il ​​cursore finirebbe all'inizio della riga dell'ultima sostituzione dopo il salvataggio.

Esempio : hai uno spazio alla fine della linea 122, sei in linea 982e inserisci :w. Non ripristinando la posizione, si tradurrebbe in una fine del cursore all'inizio della riga 122, uccidendo così il flusso di lavoro.

Imposta la chiamata per funzionare usando autocmdalcuni esempi:

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

Si può anche usare, ma non necessario in questo caso, getpos () da:

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

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

2

Il mio plugin DeleteTrailingWhitespace fa questo e, contrariamente ai vari semplici :autocmdsfloating, gestisce anche casi speciali, può interrogare l'utente o interrompere le scritture con spazi vuoti finali.

La pagina dei plugin contiene collegamenti ad alternative; c'è anche una grande discussione sul Vim Tips Wiki .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.