Zsh

找到 Zsh 完成腳本但未執行

  • November 6, 2019

首先,假設我有:

alias foo='path/to/my/program'

在我的 中.zshrc,然後我為它創建了一個完成腳本~/.oh-my-zsh/completions/_foo,在我的文件中:

#compdef foo

_foo() {
   echo "hello"
}

_foo

所以,我希望當我foo [tab]從 shell 輸入時,我會看到

$foo [tab]
hello

但相反我得到了

$ foo [tab]_foo

我按下 後,文本_foo才被列印出來tab

你有解決這個問題的想法嗎?

這是關於 zsh 的一般答案。我不知道哦-我的-zsh。

預設情況下,zsh 在嘗試完成之前擴展別名。這通常是正確的。因此,將完成函式與別名的名稱相關聯僅在您繞過別名時才有效,例如 after \foo Tab

您可以使用 關閉此行為setopt complete_aliases。但是對於您沒有明確設置完成的所有別名,您將失去完成。

如果你想有一個特殊的情況foo,最好的方法是把它變成一個函式。

function foo {
 path/to/my/program "$@"
}

這並不能解釋為什麼_foo要列印。也許有些 oh-my-zsh 怪異。

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