2013-06-26 14 views
8

zsh büyüktür, ancak tamamlanma sistemi çok çeşitlidir. Ve belgelerin iyi örnekleri yok. Belirli bir uygulama için tamamlanması için bir şablon var mı. Tamamlama, eşleşme verilerini yeni satırlarla ayrılmış bir dosyadan alır mı?Bir dosyanın zsh tam değişkenlerini bir dosyadan yapın

ben "canlı" uyum verilerini alır madenin eski bir örneğini değiştirerek çalıştı:

~ % cat .zsh/completers/_jazzup 
#compdef jazz_up 
_arguments "2: :(`mpc lsplaylists|sed -e 's# #\\\\ #g'`)" 

Öyle yerine mpc çağırma orada cat my_file kaynağı ve olabilir ama bunu yapmak için daha şık bir yolu var olacağını Basit görev? Ve bu tamamlama yerleştirmeye özgüdür: zsh program adı tanındıktan sonra herhangi bir noktada tamamlamaya çalışacak bir örnek verebilir misiniz?

Eşleşme verilerinde whitespaces vb. Olacak ve tamamlanma WS'den çıkmalıdır. Bunun örneği: tamamlanmasının bir komuta Say için yapılandırılmış olacağını Şimdi eğer

Foo bar 
Barbaric 
Get it (42) 

, biz zsh üzerinden, bu tür davranışları almalısınız:

$ Say Fo<TAB> 
$ Say Foo\ bar 
$ Say Ge<TAB> 
$ Say Get\ it\ \(42\) 

cevap

15

Basit tamamlama ihtiyacı daha iyi _describe ile ele alınmaktadır, bir dizi holding tamamlama seçeneklerini ve onlar için bir açıklama çiftleri (birden fazla dizi/açıklama çiftleri kullanabilirsiniz, kılavuzu kontrol edin).

(_arguments harika ama çok karmaşık.)

[...]

İlk

echo "foo\nbar\nbaz\nwith spac e s\noh:noes\noh\:yes" >! ~/simple-complete 

Sonra yere senin $fpath bir dosya _simple oluşturmak bir dosya oluşturmak:

#compdef simple 

# you may wish to modify the expansion options here 
# PS: 'f' is the flag making one entry per line 
cmds=(${(uf)"$(< ~/simple-complete)"}) 

# main advantage here is that it is easy to understand, see alternative below 
_describe 'a description of the completion options' cmds 

# this is the equivalent _arguments command... too complex for what it does 
## _arguments '*:foo:(${cmds})' 

Çalışıyor. Çalışıyor. Sadece _simple tamamlama dosyasının fpath'unuza yerleştirildiğinden emin olun.

Seçenek listesinde yer alan : seçeneğinin, (tekil) açıklamalarından (oh:noes) bir seçeneği ayırmak için kullanılması gerektiğine dikkat edin. Yani bu teklif (oh\:yes) belirtmediğiniz sürece _describe ile çalışmayacaktır. Yorumlanan _arguments örneği, :'u ayırıcı olarak kullanmayacaktır.

+0

Fantastik. Referanslar ve detaylar hakkında bir şeyler açabilirseniz, bazı ödüller kazanacağım, ancak bu, aradığım mükemmel örnek olarak görülüyor. – progo

+2

Teşekkür ederim, çok fazla. Bu şimdiye kadar zsh tamamlanması için bulduğum en özlü adım. Alınandan çok daha fazla başarıyı hak ediyor. –

+0

'uf' bayraklarıyla ilgili bilgi nereden alabilirim – Timo