Osx

ZSH 在命令行參數中自動完成目錄?

  • October 19, 2010

從正常 StackOverflow 轉移…

我是 OSX 上的新 ZSH 轉換(提示中的 git status 是我實現飛躍的主要驅動力)。一切似乎都在順利進行,但我從 BASH 中遺漏了一些東西..

在 BASH 中,我將開始執行圍繞 Symfony 的 CLI 工具建構的 CLI PHP 腳本。

通常我會像這樣執行命令:

$> php doctrine --configuration=../conf/doctrine.xml migrations:migrate

在 BASH 中,我可以在輸入完成目錄的部分時使用TAB密鑰。../conf/doctrine.xml

在 ZSH 中,TAB在鍵入目錄時按下鍵會導致……什麼都沒有。

ZSH 中是否有設置或我可以設置的配置來啟用這種嘗試完成幾乎任何看起來像目錄的行為的行為?

Zsh 試圖聰明地選擇完成,但它不夠聰明,知道在 之後doctrine --configuration=,它應該完成一個文件名。Bash 要麼足夠聰明,可以正確解析此命令,要麼過於愚蠢,無法在此處完成除了文件名之外的任何內容。

您可以為doctrine. 不過,這有點高級——完成功能往往有點神秘。您可能會發現使用 zsh 的替代、較舊、更簡單但功能較弱的完成系統compctl(在zshcompctl手冊頁中記錄)更容易編寫完成程序。

如果你有一個 bash 完成功能doctrine,你可以通過autoload bashcompinit; bashcompinit在你的~/.zshrc. 請參閱zsh wiki 上的從 bash 切換

您可能會發現將幾個鍵綁定到_bash_complete-word. 此小元件(互動式命令)執行一些內置類型的補全,具體取決於呼叫小元件的鍵序列中的最後一個字元:/用於目錄、$用於參數名稱等。例如,包含bindkey '^X/' _bash_complete-word在您的~/.zshrc中,然後按Ctrl+X /到在任何上下文中完成文件名(如果文件名前面的標點符號不是 shell 中的單詞分隔符,您可能需要在文件名之前臨時插入一個空格)。

引用自:https://unix.stackexchange.com/questions/3283