ここ数か月間、ChromeからURLをコピーしてからChromeでShift-Insertを押すと、貼り付けたurxvt
URLがエスケープされることがわかりました。
たとえば、元のURLは次のようになります。
http://example.com/?a=c
貼り付けた内容は次のとおりです。
http://example.com/\?a\=c
ただし、Web ブラウザや に貼り付ける場合は、vim
抜けません。
アーチLinuxを使用していますurxvt
、、、zsh
oh-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プラグインの使用(または不足)です。
- Safe Pasteプラグインは安全な貼り付けを保証せず、他の機能を中断します。 1742コメント
このプラグインを有効にすると、URLを含む貼り付けた特殊文字のエスケープも中断されます。
- #4434を貼り付けた後、キーボード入力は無効になります。
- Debianのバグレポートログ - #802581 zsh:URLを貼り付けるとurl-quote-magicが機能しなくなりました。
これらのレポートに似たレポートでは、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
上矢印キーを使ってひもを引いて引き出すだけです。