2010-08-15 17 views
6

Vim, yeni bir dosya writte olduğunda 'CommandTFlush' komutunu çalıştırmaya çalışıyorum. Command-T eklentisini kullanmayanlar için 'CommandTFlush' komutu, geçerli dizindeki dosyaların dizinini yeniden oluşturmak için kullanılır.Yeni bir dosya yazıldığında CommandTFlush komutunu çalıştırın

Ne yapmak istediğim komut, dosya diske yazıldıktan sonra komutu çalıştırmaktır; böylece CommandTFlush dosyayı bulur ve dizine ekler.

Bir fonksiyonu kendim yazmaya denedim ama ya o ateş etmiyor veya (dosya yazılmadan önce ve bütün mesele dizine dosyayı eklemektir) daha çok erken basar:

au! BufWritePre * ks| call NewFilesUpdatesCommandT() 
function! NewFilesUpdatesCommandT() 
    let [email protected]% 
    if !filereadable(filename) 
     CommandTFlush 
    endif 
endfunction 

BufWritePre'de bir boolean var (isTheFileNew) ayarlanarak çözülebilir ve sonra dosya oluşturulduysa BufWritePost'da CommandTFlush komutunu çalıştırabilirim, ancak sözdizimini anlayamıyorum. Başka bir çözüm, BufWritePost geri çağrısını BufWritePre geri arama içinden ayarlama/iptal etme olabilir, eğer bu mümkün olursa ...

Burada kimse bana yardımcı olabilir mi? ;)

+0

Sizin autocommand'ınızın başında ne ks | 'yapıyor? Bunu vim yardımında bulamıyorum. – ZyX

+0

Bulundu. Fonksiyonunuz imleci hareket ettirmiyorsa neden pozisyonunuzu işaretlemek istersiniz? – ZyX

+0

Gerçekten hiç bir fikrim yok. #[email protected] 'te aldığım bazı göstericilere göre sadece kötü bir kopyalama/yapıştırma işi. Henüz yardım dosyalarından nasıl yararlı bir şey elde edeceğinizi henüz anlamış değilim. Vim ile üçüncü günümdeyim;) – peterfarsinsen

cevap

2
augroup NFUCT 
    autocmd! 
    autocmd BufWritePre * call NFUCTset() 
augroup END 
function NFUCTset() 
    if !filereadable(expand('%')) 
     augroup NFUCT 
      autocmd BufWritePost * call NFUCT() 
     augroup END 
    endif 
endfunction 
function NFUCT() 
    augroup NFUCT 
     autocmd! 
     autocmd BufWritePre * call NFUCTset() 
    augroup END 
    CommandTFlush 
endfunction 

Bu, ikinci önerinizin gerçekleştirilmesidir.

+0

Teşekkürler! Tam olarak istediğim gibi çalışıyor gibi görünüyor. – peterfarsinsen

17

İşte benim çözümüm. Bir dosya yazıldığında ve ayrıca Vim penceresinin odaklandığı her defasında CommandTFlush'ı tetikler. Bu, vim dışındaki dosyaları oluştururken yararlıdır - örneğin, sürüm kontrol sisteminizdeki dallar arasında geçiş yaparak. Yeni dosyalar, Vim'i tekrar girdikten hemen sonra CommandT'de mevcut olacak.

augroup CommandTExtension 
    autocmd! 
    autocmd FocusGained * CommandTFlush 
    autocmd BufWritePost * CommandTFlush 
augroup END 
+0

Çok iyi çalışıyor. Ben sadece benim .vimrc ve şimdi CommandT içinde beklediğiniz gibi çalışır. Teşekkürler. –

+0

Bu harika, teşekkürler. – jpc

+0

Mükemmel - teşekkürler! – Skilldrick

İlgili konular