web-dev-qa-db-ja.com

端末画面でブラケットペーストモードが散発的に有効になるのはなぜですか?

私はUbuntu 14.04を使用していますが、端末画面に奇妙な問題があり、それが多くのバグを引き起こしています。誰かがそれを手伝ってくれたり、何か間違っているかLinux以外の方法をやっている場合は説明してもらえますか?何らかの解決策がありますが、なぜこれが何度も起こるのかを理解したいと思います。

ノートやインターネットからbashコマンドをコピーすることがよくあり、コピーしたものをラップする奇妙な0〜および1〜のシンボルが表示されることがあります。これは非常に迷惑であり、これは完全にランダムに発生します。

長い検索の後、このことは 分割貼り付けモード と呼ばれることがわかりました。このコマンドprintf "\e[?2004l"を使用して、このモードが突然有効になった場合に端末を修正します。

この機能を何らかの方法で永久に無効にすることは可能ですか?私は今働いているすべてのUbuntuマシンでそれに直面しました。以前は、Ubuntu 10.10および12.04を使用していましたが、このような問題は一度もありませんでした。

22
artemdevel

ブラケット貼り付けモードを無効にできます。

Bashで一時的に試すには:

bind 'set enable-bracketed-paste off'

次に、その動作が好きな場合は、~/.inputrcに設定を置くか、/etc/inputrc(またはUbuntuのどこでも)でシステム全体に設定を置くことができます。

10
jwd

そのコマンドをbashrcに入れることができます。その後、ターミナルを開くたびに適用されます。

vi ~/.bashrcと入力し、最後にprintf "\e[?2004l"を追加して、:wqでファイルを保存します

6
MOHRE

whyこれが発生するという元の質問に答えるために、考えられるシナリオを次に示します。

  • 自宅のコンピューターには、ブラケットペーストをサポートするzshの新しいバージョンがありました(シェルAと呼びましょう)
  • シェルを古いバージョンのbashに設定したコンピューターにsshedしました。これは、ブラケットペーストをサポートしていません(シェルB)

問題は、私のターミナルプログラムは、シェルAからシェルBにスッシグするときにブラケットペーストが有効であるとまだ考えているため、貼り付けられたコンテンツ(0〜および1〜ビット)の周りに文字を追加し続けることです。シェルBはそれらをサポートしていないため、変更せずにそのまま渡します。シェルに特別なエスケープシーケンスを出力させることで、ブラケットペーストをオフにするよう端末に指示する必要があります-これはprintf "\e[?2004l"が行うことです。

この問題を解決する方法はいくつかあります。

  1. ブラケットペーストをまったく気にしない場合は、シェルAでオフにして、そもそも有効にしないようにします(@jwdの答え)

  2. シェルAでブラケットペーストを使用し続け、シェルBでは無効にする場合は、.bashrc(@MOHREの回答)にエスケープシーケンスを追加します。

  3. ブラケットペーストをサポートするようにシェルBをアップグレードして、これらの0〜および1〜文字を適切に解釈します。

補足:GNU画面を使用している場合、画面の外でprintfコマンドを実行する必要があります。内部では機能しないようです。

5
rjh