2013-08-15 20 views
9

Bir argüman listesiyle bir vim işlevini çağırmanın bir yolu var mı. Argüman listem, başka bir fonksiyonda isteğe bağlı uyarlama argümanlarından geliyor ve bu argümanları hedef fonksiyona iletmenin bir yoluna ihtiyacım var. run_hello olduğunu arayacakListe veya uyarlama bağımsız değişkenleriyle bir işlevi çağırın

hedef fonksiyonudur,

function! run_hello(cmd, ...) 
    echo 'run_hello' 
    echo a:cmd 
    echo a:000 
endfunction 

fonksiyonu

function! hello(...) 
    call run_hello('foo', the splats here) 
endfunction 

Farklı argümanlarla, şöyle çağrılacak.

call hello('lorem', 'ipsum', 'dolor') 

Şu anda hello(arglist) kullanarak ve ileri a:000 listesini geçirerek. Ama argüman olarak bir liste ile bir işlevi çağırmak mümkün olup olmadığını bilmek istiyorum, o zaman bu düzenli argüman listesi haline gelir. JavaScript adlı gibi

şey,

foo.apply(this, ['a', 'b', 'c'] 

teşekkürler.

cevap

14

JavaScript'in apply() eşdeğer Vimscript içinde call() geçerli:

function! hello(...) 
    call call('run_hello', ['foo'] + a:000) 
endfunction 

Bu, hiçbir yazım hatası şudur: :call fonksiyon call() adını verdi.

+0

Temiz! Teşekkür ederim. –

İlgili konular