宇宙人*_*宇宙人 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.
这是一个名为“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 元字符是为您完成的。☺
值得关注的地方是 oh-my-zsh 及其对安全粘贴插件的使用(或不使用):
启用此插件还会破坏粘贴的特殊字符(包括 URL 的特殊字符)的转义。
从这些和类似的报告来看,似乎由于不使用括号粘贴功能的url-quote-magic
更改而被破坏。您可能应该在适当的位置打开错误报告。
归档时间: |
|
查看次数: |
4705 次 |
最近记录: |