在 zsh 中,当使用通配符?
或*
如下所示时,通配符就会启动:
ls file?.txt
不过,我想在这样的情况下禁用通配符:
youtube-dl https://www.youtube.com/watch?v=QIysdjpiLcA
我可以通过将参数放在单引号或双引号('
或"
)中来解决这个问题。
在 URL 等模式中使用时,我可以以某种方式配置 zsh 来忽略通配符(即不进行任何通配符)吗?或者对于某些命令/可执行文件?
答案1
如果你把noglob
在命令前面,不进行通配符。
noglob youtube-dl https://www.youtube.com/watch?v=QIysdjpiLcA
要禁用特定命令的通配符,请将其设置为别名。
alias youtube-dl='noglob youtube-dl'
对于 URL,这有助于?
,但对 则没有帮助&
。没有办法禁用对&
except 引用的解释。
如果剪贴板中有 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(或您粘贴的任何内容)将用引号括起来。请注意,这包括浏览器会忽略的前导和尾随空格。