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


23

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

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

長い検索の後、私はこの機能がブラックペーストモードと呼ばれることを発見したのでprintf "\e[?2004l"、このモードが突然有効になった場合、このコマンドを使用して端末を修正します。

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

回答:


11

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

bashで一時的に試すには:

bind 'set enable-bracketed-paste off'

次に、その動作が好きな場合は、設定をに設定する~/.inputrcか、システム全体/etc/inputrc(またはUbuntuの任意の場所)に設定します。


4
これは私にできるように見えるので、文字「p」(および小文字の「p」のみ)を入力したり、まったく同じように貼り付けたりすることはできません
ブライアンはReinstate Monica

@BrianLeishman bind認識できない引数を解析する独特の方法のため、バージョン7より前のReadlineまたは4.4より前のBashを使用してこのコマンドを実行すると、これが起こります。この回答は、Ubuntuの次のリリース(17.04)まで有用なことは何もしません。
アンソニーG-モニカの正義

printfアプローチの作品が、私の中に入れたとき、それは仕事をしない.bashrcと、機能は何とか戻って、定期的に自分自身をオンにします。このbindアプローチは私のキーボードを壊します(pキーが機能しない, and putting that line in my 〜/ .inputrc`が10秒間機能し、-enaset-enaset-...その後10秒使用するとコンソールが永久にバーフアウトし始めます。問題
クラウド

1
正しいコマンドはbind 'set enable-bracketed-paste off'(最初の `-``の代わりにスペースを使用します。1文字のみを編集することは不可能のようです。-
矢印

7

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

ただ、入力vi ~/.bashrcおよび追加printf "\e[?2004l"終わりやでファイルを保存します:wq


はい、最初はこれを実際に実行しました:)後で、@ jwdが示唆するようにこのモードを無効にしました。
-artemdevel

1
echo 'printf "\e[?2004l"' >> ~/.bashrc同じことを1行で行い、で確認できますtail -n1 ~/.bashrc。を使用する必要はありませんvi
pzkpfw

6

これがなぜ起こるのかという元の質問に答えるために、考えられるシナリオを以下に示します。

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

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

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

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

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

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

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


ありがとう@rjh :)しかし、zshを使用したことがないか、sshで問題が発生したことはありません。数年前にUbuntuで何かが誤って設定されていたようです。
-artemdevel
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.