Command-Line
zsh:禁用某些命令或模式的萬用字元?
在 zsh 中,當使用萬用字元
?
或*
像這樣時,萬用字元會起作用:ls file?.txt
但是我想在這樣的情況下禁用萬用字元:
youtube-dl https://www.youtube.com/watch?v=QIysdjpiLcA
我可以通過將參數放在單引號或雙引號(
'
或"
)中來解決這個問題。在 URL 等模式中使用時,我能否以某種方式將 zsh 配置為忽略萬用字元(即不進行任何萬用字元)?或者對於某些命令/執行檔?
如果你把
noglob
命令放在前面,則不會進行通配。noglob youtube-dl https://www.youtube.com/watch?v=QIysdjpiLcA
要禁用特定命令的萬用字元,請將其設為別名。
alias youtube-dl='noglob youtube-dl'
對於 URL,這對 有幫助
?
,但對&
. 沒有辦法禁用&
除引用之外的解釋。如果剪貼板中有 URL,而不是粘貼它,您可以使用命令來呼叫剪貼板內容:
youtube-dl "`xsel`" # X11 automatic mouse selection youtube-dl "`xclip -o`" # X11 automatic mouse selection youtube-dl "`xsel -b`" # X11 explicitly copied clipboard youtube-dl "`xclip -o -sc`" # X11 explicitly copied clipboard youtube-dl "`pbpaste`" # macOS clipboard
您將在 shell 歷史記錄中擁有粘貼命令,而不是 URL。如果
Tab
在命令結束前按命令行末尾,命令替換將擴展為 URL。(根據您的完成設置,所需的鍵可能會有所不同;另請參閱如何在 Zsh 中的命令行中展開所有變數?以及製表符完成前綴的 Shell?。)或者,如果您的終端支持括號粘貼(現代的不錯),請在粘貼前按
Ctrl
+U
(或任何其他設置數字參數的東西)。URL(或您粘貼的任何內容)將在其周圍粘貼引號。請注意,這包括瀏覽器會忽略的前導和尾隨空格。