端末(urxvt、zsh)にURLを貼り付けることができず、一部の文字がエスケープされます。

端末(urxvt、zsh)にURLを貼り付けることができず、一部の文字がエスケープされます。

ここ数か月間、ChromeからURLをコピーしてからChromeでShift-Insertを押すと、貼り付けたurxvtURLがエスケープされることがわかりました。

たとえば、元のURLは次のようになります。

http://example.com/?a=c

貼り付けた内容は次のとおりです。

http://example.com/\?a\=c

ただし、Web ブラウザや に貼り付ける場合は、vim抜けません。

アーチLinuxを使用していますurxvt、、、zshoh-my-zsh.

答え1

これは「url-quote-magic」というZシェルモジュール行動中。シェルのメタ文字と引用を完全に無視しても、目的の結果を得ることができます。 ZLEは、引用符のない単語がURL(スキーマの前に来る)のように見える場合を検出し、残りの単語内で文字の自己挿入がどのように行われるかを変更します。

貼り付けジョブのみを入力した場合

http://example.com/?a=c
コマンドラインエディタに移動すると、次のコマンドが表示されます。走るときファイル名の拡張を試み、実行失敗ファイル名が一致しないためです。 Vivek Vermaの有名な例例:

~$mpvhttps://www.youtube.com/watch?v=HcgJRQWxKnw
zsh:一致するものはありません。https://www.youtube.com/watch?v=HcgJRQWxKnw
~$  

?覚えておいてください:Zシェルには、および[;だけでなく、(コマンド名の検索)や(数字の範囲)、、、などの多くのファイル名拡張子文字が]あります。これには Korn シェル互換性メカニズムも含まれません。より*=<>~^#zshexpnマニュアルページにはかなり長い詳細があります。

url-quote-magicはこれが引用符でないことを確認し、http:パターンプレフィックスを識別し、ファイル名拡張子を呼び出さないようにおよびをおよびに?変更します。=\?\=

だからあなたじゃないなら実際に欲しい、何らかの理由で貼り付けるか入力するURL(一重引用符を囲まないでください)は、すべてのファイル名拡張子の対象となります。 URLでシェルメタ文字の自動引用が自動的に行われたとはっきりと考えていたので嬉しいです。 ☺

答え2

@JdeBPは何が起こっているのかについて良い説明をしましたが、この動作について何ができるかわかりません。

貼り付けるときにzshがURLリンクをエスケープするのを防ぐには、URLリンクを二重引用符で囲みます。

"http://example.com/?a=c"

内容を貼り付ける:

"http://example.com/?a=c"

答え3

見てみる価値があるのは、oh-my-zshとsafe-pasteプラグインの使用(または不足)です。

これらのレポートに似たレポートでは、url-quote-magic次の変更により破損しているようです。いいえブラケットの貼り付け機能を使用してください。おそらく、適切な場所でバグレポートを開く必要があります。

答え4

明らかにこれがこの問題を解決する最もクリーンな方法ではありませんが、次はzshの自動エスケープを使用せずに文字列をコピーする回避策です。

sudo apt-get install xclip
alias zhistory_paste='echo : `expr $(date +%s) + 1`:0\;`printf "$(xclip -o clipboard)\n"` >> ~/.zsh_history && fc -R'

今何かを貼り付けたいときは、zhistory_paste上矢印キーを使ってひもを引いて引き出すだけです。

関連情報