Ich ctrl+ckopiere oft Text aus einer GUI-Anwendung und füge ihn dann mit dem Rechtsklick-Menü in meinen Terminal-Emulator (Terminator) ein und füge ihn ein. Manchmal vergesse ich, dass die Zwischenablage mehrere Zeilen enthält, was beim Einfügen in bash dazu führt, dass jede Zeile "ausgeführt" wird.
Gibt es eine Lösung, um mehrzeiliges Einfügen vollständig zu verhindern?
bash
command-line
x11
clipboard
terminal-emulator
Martin Vegter
quelle
quelle
sleep 999999
und fügen Sie ihn ein, wenn er in Ordnung aussieht. Der Befehl sleep liest die Zeilen nicht und sie werden verworfen, wenn Sie drückenctrl+c
.bash
wird Unterstützung für das Einfügen in Klammern haben ,zsh
bereits über das Plugin eines Drittanbieters .printf '\e[?2004h'
in den meisten xterm-ähnlichen Terminalemulatoren einen Einfügemodus in Klammern, in dem das Terminal den eingefügten Text in Klammern setzt, sodass Anwendungen erkennen können, wo das Einfügen beginnt und wo es endet. xterm unterstützt auch einen anderen Modus, in\e[?2005h
dem allen eingefügten Zeichen ein Präfix vorangestellt wird^V
(von vielen Anwendungen und der Disziplin tty line als verstandenlitteral-next
).Antworten:
Diese Antwort ist nicht die spezifischste für die Frage des Benutzers. Siehe meine 2. Antwort. Ich lasse dies hier, weil es das allgemeinere Problem anspricht .
Per Kommentare zu Ihrem ursprünglichen Post, müssen Sie (1) einen Terminal - Emulator , den Träger klammern Paste und (2) entsprechende Unterstützung für das, was im Terminal läuft, dh
vim
,bash
,zsh
. Terminalemulatoren, die das Einfügen in Klammern unterstützen (Liste, die basierend auf den Kommentaren zu diesem Beitrag aktualisiert werden soll):xterm
- schon seit ??gnome-terminal
- schon seit ??putty
- seit 0.63 (Erscheinungsdatum 06.08.2013)Anwendungen, die den Klammermodus unterstützen:
vim
zsh
Für
bash
StéphaneChazelas wurde ein Shell-Skript zusammengestellt , um die Erkennung dieses Modus zu erleichtern und geeignete Maßnahmen zu ergreifen.Eine spezifischere Antwort - das Verhindern, dass Zeilen abgeschnitten werden - ist nicht zu beantworten, ohne zu wissen, welches Unix-Programm ausgeführt wird, wenn Sie auf Einfügen klicken.
Ein Zwischenablage-Manager vielleicht das, was Sie brauchen.
quelle
^V
alsliteral-next
. Aber wie kommt der^V
in den Eingabestream der Anwendung?bash
der Eingabeaufforderung von readline angezeigt wird (und als Literal-next behandelt wird)). Im icanon-Modus wird es von der Zeilendisziplin dieses inneren tty-Geräts entfernt (solange derlnext
Charakter vorhanden ist^V
), genau wie wenn Sie Strg-V X manuell^V
sei denn, Sie verwenden den xterm-quoted paste
Modus (durch Senden aktiviert\e[?2005h
). Diesesperl
Skript könnte so angepasst werden, dass es alle bis auf die erste Zeile in einer mehrzeiligen Einfügung entfernt (obwohl dies für große Pasten nicht zuverlässig ist), aber wie es bereits ist, da es die neue Zeile für die Readline zitiert (als hätten Sie Strg- gedrückt). V Strg-J) verhindert, dass die Zeilen ausgeführt werden (sie werden nur zum Bearbeitungspuffer hinzugefügt und Sie müssen noch die Eingabetaste drücken, um sie auszuführen).