Como remover automaticamente os espaços finais ao salvar no Vi e no Vim?


22

Existe uma .vimrcconfiguração para remover automaticamente os espaços em branco finais ao salvar um arquivo?

Idealmente (por segurança), eu gostaria de ter apenas essa funcionalidade para determinados arquivos, por exemplo, *.rb

Respostas:


25

Isso funciona (no arquivo .vimrc) para todos os arquivos:

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

Isso funciona (no arquivo .vimrc) apenas para arquivos ruby ​​(.rb):

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

6
Essa solução é boa, mas acho que a solução da @ Sukminder abaixo é melhor, porque ela reposiciona o cursor corretamente.
hlin117

O que o lastet eusa?
acgtyrant

19

Para manter a posição do cursor, use algo como:

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

caso contrário, o cursor terminaria no início da linha da última substituição após o salvamento.

Exemplo : você tem um espaço no final da linha 122, está on-line 982e entra :w. Se não restaurar a posição, o cursor acabaria no início da linha 122, matando o fluxo de trabalho.

Configure a chamada para funcionar usando autocmd, alguns exemplos:

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

Pode-se também usar, mas não necessário neste caso, getpos () :

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

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

2

Meu plug-in DeleteTrailingWhitespace faz isso e, ao contrário dos vários :autocmdsexemplos simples , também lida com casos especiais, pode consultar o usuário ou abortar gravações com espaço em branco à direita.

A página do plugin contém links para alternativas; também há uma grande discussão no Wiki de dicas do Vim .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.