ターミナルウィンドウにファイルをドラッグアンドドロップしても、zsh 5.2の下のパスをエスケープできません


3

OS Xでは、ファイルをFinderから(または他の場所に)ターミナルウィンドウにドラッグアンドドロップすることができ、ファイルのパスは入力したかのように挿入されます。ファイルパスの前にスペースが含まれていた場合、ターミナルは二重引用符で囲まれたバージョンを取得するか、または各スペースの前にバックスラッシュを付けます。今、ファイルパス全体がただダンプされます、そして、それがスペースを含むならば、私は戻って自分でそれらをエスケープしなければなりません。

私は "shells open with"設定で遊んでいますが、シェルが開いているときに正しいエスケープが行われるようです。 /bin/bash (GNU bash 3.2.57(1) - リリース)または /bin/zsh (zsh 5.0.8)しかしシェルが私の手動でインストールされているときではありません /usr/local/bin/zsh (zsh 5.2)私はOS X 10.11.2にいます。

Terminalでドラッグアンドドロップしてしまうことがあったzshの変更はありましたか?それともTerminal自体が私のzshを含まないシェルのある種のホワイトリストを使用していますか?

編集する でzsh 5.0.8をインストールしました /usr/local/bin/zsh とファイル名 あります そのシェルに対して適切にエスケープしました。バージョン5.0.8と5.2の間でzshに何らかの変更が加えられたために、これは機能しなくなりました。

回答:


6

この動作は、zshの括弧で囲まれた貼り付け機能によって引き起こされるようです。 バージョン5.1以降、デフォルトでオン 。追加すればわかりました

unset zle_bracketed_paste

私のzshrcにそれからターミナルにファイルを落とすことはzsh 5.2で正しく働きます。

このブログ記事 bracketed-paste-magicについて言及しています。これは括弧付きペースト機能全体をオフにせずにファイルのドロップをサポートするために使用できるようです。しかし、それを実現するためにはコードを書く必要があると思います。括弧付きペーストマジックをオンにしただけでは問題は解決しませんでした。)


これを私のzshファイルの最後に追加しなければなりませんでした。初めの頃はうまくいきませんでした。私はその理由を気にする必要はありませんでした...
Marshall Eubanks

2

で述べたように @ bdesham's answer Zsh 5.1では、端末のプログラムでユーザが個々の文字を入力するのと貼り付けられた/ドラッグされたテキストを区別できる、端末の「ブラケット貼り付けモード」の使用が導入されました。

Zsh 5.1より前のBPMはEmacsのようなフルスクリーンエディタでしか使用されていなかったため、Terminal(少なくともOS X El Capitan 10.11.x以降)は、括弧付きペーストモードがオンの場合、ペースト/ドラッグしたファイルパス名のシェルクォートを行いません。通常はシェルクォートを必要としません。

Controlキーを押すと、貼り付け/ドラッグ時にシェル引用符を強制的に適用できます。


そして、commandを押したままにすると、項目がディレクトリの場合は "cd / path / to / directory;"、それ以外の場合はその親の項目が表示されます。クール!
Marshall Eubanks

それは10.10の後に修正された端末の問題です。あなたはsimblプラグインでそれをハックすることができます: github.com/fish-shell/fish-shell/issues/4323
1110101001
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.