Bagaimana cara menghapus spasi di save secara otomatis di Vi dan Vim?

22

Apakah ada .vimrcpengaturan untuk secara otomatis menghapus spasi spasi saat menyimpan file?

Idealnya (agar aman) Saya hanya ingin memiliki fungsi ini untuk file tertentu, misalnya *.rb

Michael Durrant
sumber

Jawaban:

25

Ini berfungsi (dalam file .vimrc) untuk semua file:

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

Ini berfungsi (dalam file .vimrc) hanya untuk file ruby ​​(.rb):

autocmd BufWritePre *.rb :%s/\s\+$//e
Michael Durrant
sumber
6
Solusi ini bagus, tapi saya pikir solusi @ Sukminder di bawah ini lebih baik, karena reposisi kursor dengan benar.
hlin117
Apa yang edigunakan lastet ?
Acgtyrant
19

Untuk menjaga posisi kursor, gunakan sesuatu seperti:

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

jika tidak, kursor akan berakhir di awal baris penggantian terakhir setelah save.

Contoh : Anda memiliki ruang di ujung baris 122, Anda sedang on line 982dan masuk :w. Tidak mengembalikan posisi, akan menghasilkan kursor berakhir di awal garis 122sehingga mematikan aliran kerja.

Atur panggilan ke fungsi menggunakan autocmd, beberapa contoh:

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

Satu juga dapat menggunakan, tetapi tidak diperlukan dalam hal ini, getpos () oleh:

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

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

Plugin DeleteTrailingWhitespace saya melakukan hal ini dan, berbeda dengan berbagai :autocmdsfloating sederhana , juga menangani kasus-kasus khusus, dapat meminta pengguna, atau membatalkan menulis dengan trailing whitespace.

Halaman plugin berisi tautan ke alternatif; ada juga diskusi besar tentang Vim Tips Wiki .

Ingo Karkat
sumber