2016-02-13 73 views
2

如何將這個bash完成函數轉換爲zsh完成函數?如何將此bash完成函數轉換爲zsh完成函數?

這個bash函數允許你在當前工作目錄上面選項卡上填寫目錄的名字,這樣你可以更快,更準確地導航文件層次結構。

例子:

$ pwd 
/Users/me/Animals/Mammals/Ungulates/Goats/Ibex 
$ upto Animals 
$ pwd 
/Users/me/Animals 

代碼:

function upto { 
    if [[ -z $1 ]]; then 
     return 
    fi 
    local upto=$1 
    cd "${PWD/\/$upto\/*//$upto}" 
} 

_upto() 
{ 
    local cur=${COMP_WORDS[COMP_CWORD]} 
    local d=${PWD//\//\ } 
    COMPREPLY=($(compgen -W "$d" -- "$cur")) 
} 
complete -F _upto upto 

我想在zsh中一個類似的,但我不完全理解這個是如何工作的機制,多更少如何修改爲zsh。

回答

2

試試這個功能完成

_upto() { 
    local parents; 
    parents=(${(s:/:)PWD}); 
    compadd -V 'Parent Dirs' -- "${(Oa)parents[@]}"; 
} 

compdef _upto upto啓用它。

通過創建一個deply嵌套文件夾來測試它:f=/tmp/foo/bar/one/two/three;mkdir -p $f;cd $f。打字upto <Tab>應該給

three two one bar foo tmp 

要反轉的目錄(即,開始在根而在..提議),從compadd線取出(Oa)標誌。