2013-02-28 76 views
0

我有一個ZSH完成者,提供了預期的完成,而是爲他們提供在字典順序,而不是它們被通過compadd添加順序:ZSH完成順序

_matcher_complete() { 
    (git ls-files 2>/dev/null || find .) | /usr/local/bin/matcher -l20 ${words[CURRENT]} | while read line; do 
    compadd -U "$line" 
    done 
    compstate[insert]=menu 
} 

zle -C matcher-complete complete-word _generic 
zstyle ':completion:matcher-complete:*' completer _matcher_complete 
zstyle ':completion:matcher-complete:*' menu-select 

bindkey '^X^T' matcher-complete 

我怎樣才能訂購落成通過插入順序?

回答

2

使用靈感另一ZSH完成劇本,我改變了_matcher_complete功能如下:

_matcher_complete() { 
    integer i=1 
    (git ls-files 2>/dev/null || find .) | /usr/local/bin/matcher --limit 20 ${words[CURRENT]} | while read line; do 
    compadd -U -2 -V $i -- "$line" 
    i=$((i+1)) 
    done 
    compstate[insert]=menu 
} 

注意不同的參數傳遞給compadd。我還沒有足夠的時間來真正瞭解每個標記正在做什麼(請參閱man zshcompwid),但看起來您需要明確指定順序(因此在上面的函數中使用$i)。

假設你安裝了matcher,這段代碼會給你模糊的路徑完成ala Command-T/CtrlP