Vi ve Vim'de kaydedilen boşlukları otomatik olarak nasıl şeritleyebilirim?


22

.vimrcBir dosyayı kaydederken arka boşluğu otomatik olarak kaldırmak için bir ayar var mı ?

İdeal olarak (güvenli olmak için) sadece belirli dosyalar için bu işlevselliğe sahip olmak istiyorum, örn. *.rb

Yanıtlar:


25

Bu, tüm dosyalar için (.vimrc dosyasında) çalışır:

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

Bu sadece yakut (.rb) dosyalar için (.vimrc dosyasında) çalışır:

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

6
Bu çözüm güzel, ama bence @ Sukminder'ın aşağıdaki çözümü daha iyi, çünkü imleci doğru şekilde konumlandırıyor.
hlin117

Lastet ne ekullanıyor?
acgtyrant

19

İmleç konumunu korumak için aşağıdaki gibi bir şey kullanın:

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

aksi takdirde imleç kaydettikten sonra son değiştirmenin satırının başına gelecektir.

Örnek : Satırın sonunda bir boşluğunuz var 122, hatta 982ve giriyorsunuz :w. Konumu geri yüklememek, imlecin satır başında bitmesine ve 122dolayısıyla iş akışının öldürülmesine neden olur.

Kullanarak işlev çağrısı ayarlama autocmd, bazı örnekler:

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

Bir de kullanılabilir, ancak bu durumda gerekli değildir, getpos () tarafından:

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

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.