将 url 粘贴到终端(urxvt,zsh)失败,一些字符被转义

宇宙人*_*宇宙人 12 zsh clipboard rxvt oh-my-zsh

最近几个月,我发现如果我在 Chrome 中复制 URL,然后在 中 Shift-Insert urxvt,粘贴的 URL 会被转义。

例如,原始网址是:

http://example.com/?a=c
Run Code Online (Sandbox Code Playgroud)

粘贴的内容是:

http://example.com/\?a\=c
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其粘贴到其他地方,例如在 Web 浏览器中或在 中vim,则无法逃脱。

我用的是 Arch Linux, urxvt, zsh,oh-my-zsh.

Jde*_*eBP 8

这是一个名为“url-quote-magic”的 Z Shell 模块。即使您完全忽略了 shell 元字符和引用,它也试图确保您最终得到您想要的结果。它检测(在 ZLE 中)一个未引用的单词何时看起来像一个 URL,前面有一个模式,并改变字符自我插入发生在单词其余部分的方式。

如果粘贴操作只是输入

http://example.com/?a=c
在命令行编辑器中,您最终会得到一个命令,该命令在运行时会尝试执行文件名扩展,但由于没有匹配的文件名而无法执行Vivek Verma 的一个著名例子是:

~$ mpv https://www.youtube.com/watch?v=HcgJRQWxKnw 
zsh:未找到匹配项:https : //www.youtube.com/watch 
? v= HcgJRQWxKnw ~$  

记住:在Z壳牌有很多的文件名扩展字符-不仅包括?[],和*; 还有=(命令名称搜索)<>(数字范围)~^、 和#。这甚至不包括 Korn shell 兼容性机制。有关相当冗长的详细信息,请参阅zshexpn手册页。

网址引号魔法认定,这是不是一个引用一句话,认识到http:模式的前缀,并且改变了?=\?\=,这样他们就不会调用文件名扩展。

因此,除非出于某种原因,您确实希望粘贴或输入的 URL(不添加任何单引号、注释)受所有文件名扩展的约束,并且要么无法正常工作要么(在极少数情况下)意外情况)产生意外的匹配,您可能应该很高兴在您清楚地认为是 URL 的情况下自动引用 shell 元字符是为您完成的。☺

  • 5年后的你好。这不会考虑 URL 是否粘贴在引号内而导致引号中断。 (2认同)

Tho*_*key 0

值得关注的地方是 oh-my-zsh 及其对安全粘贴插件的使用(或不使用):

从这些和类似的报告来看,似乎由于使用括号粘贴功能的url-quote-magic更改而被破坏。您可能应该在适当的位置打开错误报告。