web-dev-qa-db-ja.com

「必須テキスト」を端末エミュレータに貼り付けると「^ [[200〜required text〜」になります

ターミナルエミュレーターに貼り付けると、macOSで(Terminal.appまたはiTerm2.appを使用して) )またはLinuxでは(urxvtを使用)余分な文字が表示されることがあります。

文字は常に同じです-貼り付けられたテキストの前に^[[200~^[が強調表示されます)が表示され、貼り付けられたテキストの後に余分な~が表示されます。キャンセルしてもう一度貼り付けると、正しく貼り付けられます。

たとえば、ここで their webpage からコピーしたgit clone https://git.qemu.org/git/qemu.gitをiTerm2に v。キャンセルしました ctrlc (再コピーせずに)再び貼り付け v そしてそれは大丈夫だった。

screenshot

これは確かに常にというわけではありませんが、1日に数回、原因を特定することができず、確実に再現することができません。

  • テキストはどこからでも取得できます(Webサイト、テキストドキュメント、ターミナル自体からコピー)。
  • コピーしたときのカーソルの位置が変化しないようです(カーソルをコピーしているとは思いません)
  • マウスの位置に違いはないようです。

これらの^[[200~~文字とは何ですか。どうすれば削除できますか?それらは常に同じであり、macOSとLinuxの両方で表示されるため、確かにそれらは特定の何かを表す必要があります。

3
lx07

これらの文字は ブラケットペースト モードで使用されます。一部の端末ベースのプログラムでは、このモードを有効にして、貼り付けたテキストと直接入力したテキストを区別できるようにします。

たとえば、テキストエディターは貼り付けられたテキストの自動インデントを一時的に無効にします。CLIシェルを使用すると、貼り付けられたコマンドを実行前に確認/確認できます(たとえ改行で終わっていても)。 zshでは、貼り付けられたすべてのコマンドが反転表示され、Enterキーを押すまですぐには実行されません。

「ブラケット」は、「特殊キー」エスケープシーケンス(ESC [ <num> ~)の通常の形式に従います。これは、PgUp/PgDnキーまたはF4〜F12ファンクションキーと同じです。したがって、シェルまたはエディターの観点からは、それらもキーバインディングとして扱われます。 (たとえば、bindkeyを実行すると、バインディング"^[[200~" bracketed-pasteが表示されます。)詳細については、zshzle(1)マニュアルで「bracketed-paste」を検索してください。

他のすべてのエスケープシーケンスと同様に、(誤って)押した場合 Ctrl+V貼り付けの直前(または特殊キーを押す前)に、zshは次のシーケンスをliteral inputとして扱います。例えば、 Ctrl+V↑Up 履歴をスクロールしません–代わりに文字どおりESC [ Aシーケンスを挿入します。これを回避するには、zshのbindkey(デフォルトでは"^V" vi-quoted-insertと表示される)を使用してCtrl + Vキーをバインド解除できます。

また、他のほとんどの端末エミュレーションモードと同様に、ブラケットペーストモードは、エスケープシーケンスを端末エミュレータアプリに送信することで有効になります。そのため、それを使用するプログラムが予期せず終了した場合、モードを無効にする機会がない可能性があります。この場合、printf "\e[?2004l"を実行すると、現在のところモードが無効になります。

(端末エミュレータはプログラムの開始と終了を完全に認識していません(さらに、アプリがSSH経由でリモートで実行されている場合はさらにそうです)。そのため、プログラムが終了したときにモードを自動的に無効にする方法はありません。たとえば、プログラムが「マウスレポート」モードが有効になっている。)

4
user1686