zsh:禁用某些命令或模式的通配符?

zsh:禁用某些命令或模式的通配符?

在 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(或您粘贴的任何内容)将用引号括起来。请注意,这包括浏览器会忽略的前导和尾随空格。

相关内容