2011-12-04 10 views
6

Ben ls komuta benim otomatik tamamlama işlevi kanca compctl -K _my_cpl ls kullanın. Fonksiyon, bir indeks dosyasından isimler listesi döndürür.Zsh otomatik tamamlama işlevinden ek bir alan nasıl kaldırılır?

Ancak zsh her zaman her tamamlanmasından sonra bir alan sağlar. Birden çok düzeyli dizini otomatik olarak tamamlamak istiyorsam, her defasında bir boşluk kaldırmam gerekiyor. Bash complete komutunda -o nospace seçeneği gibi ek alanı kaldırmanın bir yolu var mı?

Ben zstyle ':completion:*' add-space false komutu test edilmiş ve çalışmıyor. Teşekkür ederim.

_my_cpl() { 
local cur last opts 

# current word in command line. 
read -cA cur 
last=$cur[-1] 

# grep all directories and file names under current directory level. 
opts=`egrep "${last}[^/]*[$|/]*" ~/index -o |uniq` 

reply=($=opts) 
} 
compctl -K _my_cpl ls 
+0

zsh bir bashcompinit modülüne sahiptir. Bash tam işlevimi bir çalışma olarak zsh'e bağlayabilirim. özdevinimli_yükle bashcompinit bashcompinit – leo

cevap

2
compctl -K _my_cpl -S '' ls 

Bu İstediğin soru cevaplar, ama yapmak istediğiniz şey için yeterince esnek olmayabilir. Özellikle, bu yaklaşım, dizinler ve normal dosyalar için farklı bir sonek belirtmenize izin vermez. Bunu istiyorsanız, farklı -S argümanlarla compadd ayrı çağrıları “yeni” tamamlama sistemine geçmek ve yapmak gerek.