Zsh
在 zsh 中使用 makro 自動完成生成文件不正確(在 bash 中有效)
我有一個具有目標的生成文件
- 啟動產品
- 開始測試
- 停止產品
- 停止測試
- 重啟產品
- 重啟測試
自動完成在 bash 中沒有問題,但在 zsh 中它只會完成
start-
等等start-prod
。目標是用宏定義的。
define commands = $(eval restart-$(1): stop-$(1) start-$(1) start-$(1): ; docker-compose up -d --remove-orphans $(1) stop-$(1): ; docker-compose stop $(1) ) endef $(call commands,prod) $(call commands,test)
我的假設是 bash 評估 makefile 以獲取目標,而 zsh 嘗試解析它。
有沒有辦法讓它在 zsh 中工作。
我嘗試在 zsh 中使用 bash 命令,就像這個問題中提到的那樣。但這只是在我嘗試完成 makefile 時出現錯誤
_init_completion: command not found zsh
帶有選項的Bash 呼叫
make
,使其以規範化的形式列印出評估的 makefile。Zsh 也可以這樣做,但預設情況下它使用自己的解析器。呼叫make
會提供更精確的資訊,但由於它會評估諸如$(shell)
makefile 中的命令之類的內容,因此在您不信任 makefile 的內容的極少數情況下,它可能會更慢並且很危險(儘管這種情況非常罕見,因為原因你會使用完成是因為你計劃執行make
)。要讓 zsh 呼叫
make
命令,請啟用完成樣式。(要找出要設置的確切樣式模式,查看活動時生成的跟踪比找出文件更容易。)call-command
set -x
zstyle ':completion::complete:make:*:targets' call-command true
替換
make
為*
for 以適用於其他補全,例如 forant
。即使啟用了此功能,
make
如果它不是 GNU make,zsh 也不會呼叫,因此您可以在任何地方啟用它而不會失去功能。(Bash 可以,因此 bash 的完成不適用於其他 make 實現。)