2013-11-04 15 views
6

Bir dosyada aşırı beyaz boşluk kaldırmak için bir işlev yazdık:Geçerli imleç konumunu nasıl kaydederim ve daha sonra Vimscript dosyasına nasıl yüklerim?

let g:trim_whitespace = 1 

function! TrimWhitespace() 
    if g:trim_whitespace 
     normal :%s/\s\+$//e 
    endif 
endfunction 

konu imleç pozisyonu ikamesi komutundan sonra [1, 1] için ayarlanmış olmasıdır. Ben imleci hiç hareket istemiyorum, bu yüzden imleç konumunu kaydetmek ve yedek komutundan sonra sıfırlamak için çalıştı:

let a:cursor_pos = getpos(".") 
normal :%s/\s\+$//e 
exec cursor(a:cursor_pos[1], a:cursor_pos[2]) 

Ama hala aynı şey olur cursor çağrısı vardı sanki etkisi yok. Herhangi bir fikir? Bir işareti koyarak

cevap

8
  1. :executeÖr komutları değerlendirilmesi için, fakat cursor() olan yerleşik bir fonksiyonu. :call cursor(a:cursor_pos[1], a:cursor_pos[2]) ile çağırmanız gerekiyor. Ayrıca, :substitute komutunu çalıştırmak için işlevinizde :normal'a ihtiyacınız yoktur; sadece %s/\s\+$//e yazınız. tampon içinde :call setpos('.', a:cursor_pos)
  2. atlar hala görünümü değişebilir, yani görünür tampon hangi bölümünün:
  3. çağırmak için daha basit olan bir karşılık gelen setpos() işlevi yoktur. Bunu önlemek için, winsaveview()/winrestview()'u (imleç konumunu içeren) kullanmanız gerekir.
  4. İşleviniz hala arama geçmişini gizler ve değiştirilemeyen arabelleklerde başarısızlık gibi başka eksikliklere sahiptir. Özellikle bu özellikle, çok yaygın işlevsellik için, çeşitli çözümler, örneğin benim DeleteTrailingWhitespace plugin benim var. (Eklenti sayfasının alternatif eklentilere bağlantıları vardır.) Gerekmediğinde çarkı yeniden icat etmeyin!
+0

Öğrenme için jantı yeniden keşfetmiyor mu? :) Harika bir açıklama için teşekkürler. – Hubro

+0

Öyleyse sorun yok (ama diğer çözümlerden haberdar olduğunuzu belirtebilirdiniz/etmelisiniz). Eklenti tavsiyesi nasıl göndermediğimi unutmayın, ancak öğrenmenize yardımcı olması için kodunuzu açık bir şekilde ele aldım. İyi eğlenceler! –

3

Dene:

mark ` 
%s/\s\+$//e 
normal `` 
İlgili konular