Warum wird der Einfügemodus in Klammern in meinem Terminalbildschirm nur sporadisch aktiviert?

22

Ich benutze Ubuntu 14.04 und ich habe ein seltsames Problem mit meinem Terminal-Bildschirm, das mich sehr nervt. Könnte mir jemand dabei helfen oder mir erklären, ob ich etwas falsch mache oder nicht unter Linux? Ich habe eine Lösung, aber ich möchte verstehen, warum dies immer wieder passiert.

Ich kopiere oft Bash-Befehle aus meinen Notizen oder aus dem Internet und manchmal bekomme ich komische 0 ~ und 1 ~ Symbole, die die von mir kopierten Dinge umschließen. Es ist sehr ärgerlich und dies geschieht auf völlig zufällige Weise.

Nach einer langen Suche fand ich heraus, dass dieses Ding als geklammerter Einfügemodus bezeichnet wird. Daher verwende ich jetzt diesen Befehl printf "\e[?2004l", um mein Terminal zu reparieren, wenn dieser Modus plötzlich aktiviert wurde.

Ist es möglich, diese Funktion dauerhaft zu deaktivieren? Ich habe es auf allen Ubuntu-Rechnern erlebt, auf denen ich jetzt arbeite. Früher habe ich Ubuntu 10.10 und 12.04 verwendet und ich hatte noch nie ein solches Problem.

artemdevel
quelle

Antworten:

11

Sie können den Einfügemodus in Klammern deaktivieren.

Um es vorübergehend in der Bash zu versuchen:

bind 'set enable-bracketed-paste off'

Wenn Sie möchten, wie sich das verhält, können Sie die Einstellung in Ihrem ~/.inputrcoder systemweit in /etc/inputrc(oder wo auch immer unter Ubuntu) festlegen.

jwd
quelle
4
Alles, was das für mich zu tun scheint, ist, es so zu machen, dass ich den Buchstaben "p" (und nur einen Kleinbuchstaben "p") nicht eingeben oder es wie überhaupt einfügen kann, und sonst nichts
Brian sagt Reinstate Monica
@BrianLeishman Aufgrund der ungewöhnlichen Art und Weise, wie bindArgumente analysiert werden, die nicht erkannt werden, geschieht dies, wenn Sie diesen Befehl mit Readline vor Version 7 oder Bash vor 4.4 ausführen. Diese Antwort wird erst mit der nächsten Veröffentlichung von Ubuntu (17.04) von Nutzen sein.
Anthony G - Gerechtigkeit für Monica
Der printfAnsatz funktioniert, aber er funktioniert nicht, wenn er in my eingefügt wird .bashrc, und die Funktion wird in regelmäßigen Abständen wieder aktiviert. Der bindAnsatz bricht meine Tastatur ( pTaste funktioniert nicht , and putting that line in my ~ / .inputrc` funktioniert 10 Sekunden lang, und dann beginnt die Konsole -enaset-enaset-...nach 10 Sekunden Verwendung für immer auszublenden . Ich habe schließlich nur manuell ein Upgrade auf Bash 4.4 von der Quelle durchgeführt, um das blöde Problem zu beheben Problem
Cloud
1
Der richtige Befehl lautet bind 'set enable-bracketed-paste off'(mit einem Leerzeichen anstelle des ersten `-``. Die Bearbeitung nur eines Zeichens scheint nicht möglich zu sein.
Pfeil
7

Sie können diesen Befehl in Ihre einfügen bashrc. Dann wird es jedes Mal angewendet, wenn Sie Ihr Terminal öffnen.

Einfach eingeben vi ~/.bashrcund printf "\e[?2004l"am Ende hinzufügen und die Datei mit speichern:wq

MOHRE
quelle
Ja, das habe ich zuerst tatsächlich getan :) Später habe ich diesen Modus einfach deaktiviert, wie von @jwd vorgeschlagen.
Artemdevel
1
echo 'printf "\e[?2004l"' >> ~/.bashrctut dasselbe in einer Zeile, und Sie können mit überprüfen tail -n1 ~/.bashrc. Es gibt keine Notwendigkeit zu verwenden vi.
pzkpfw
6

Um Ihre ursprüngliche Frage zu beantworten, warum dies passiert, ist hier ein mögliches Szenario:

  • Mein Heimcomputer hatte eine neue Version von zsh, die das Einfügen in Klammern unterstützte (nennen wir es Shell A).
  • Ich habe auf einem Computer eine Shell installiert, die auf eine ältere Version von bash eingestellt ist, die das Einfügen in Klammern nicht unterstützt (Shell B).

Das Problem ist, mein Terminal-Programm denkt immer noch, dass das Einfügen in eckigen Klammern aktiviert ist, wenn von Shell A nach Shell B verschoben wird. Shell B unterstützt sie nicht und leitet sie unverändert weiter. Sie müssen Ihr Terminal anweisen, die eingeklammerte Paste zu deaktivieren, indem Sie Ihre Shell eine spezielle Escape-Sequenz drucken lassen printf "\e[?2004l".

Es gibt verschiedene Möglichkeiten, das Problem zu lösen:

  1. Wenn Ihnen das Einfügen in eckigen Klammern überhaupt nicht wichtig ist, deaktivieren Sie es in Shell A, damit es überhaupt nicht aktiviert wird (@jwds Antwort).

  2. Wenn Sie weiterhin in Klammern stehende Paste für Shell A verwenden möchten, diese jedoch in Shell B deaktivieren möchten, fügen Sie die Escape-Sequenz zu Ihrer .bashrcAntwort (@ MOHRE) hinzu.

  3. Aktualisieren Sie die Shell B, um das Einfügen in Klammern zu unterstützen, damit diese Zeichen 0 ~ und 1 ~ richtig interpretiert werden.

Randnotiz: Wenn Sie GNU-Bildschirm verwenden, müssen Sie diesen printfBefehl außerhalb des Bildschirms ausführen . Es scheint nicht zu funktionieren, während man drinnen ist.

rjh
quelle
Danke @rjh :) Aber ich habe nie zsh verwendet oder hatte ein Problem mit ssh, wie Sie beschrieben haben. Es sieht so aus, als wäre etwas auf Ubuntu vor Jahren falsch konfiguriert worden.
Artemdevel