Warum fügt Strg + V nicht in Bash (Linux-Shell) ein?

192

Wenn ich etwas in die Zwischenablage kopiere und Ctrl+ Vin Bash drücke , passiert nichts. Wenn Sie jedoch mit der rechten Maustaste klicken und Einfügen auswählen, wird der Job ausgeführt.

Warum? Gibt es ein vernünftiges Problem (da bin ich mir sicher) hinter diesem Verhalten in Linux?

Yasser Zamani
quelle
25
Shift- Insertfunktioniert auch
bonyiii
33
Ich Ctrl-Shift-Vpersönlich bevorzuge .
Amalloy
3
Sie können in den meisten Shell-Umgebungen auch Umschalt + Einfügen verwenden .
Fabian
4
Was ist, wenn Sie keinen Insert-Schlüssel haben?
Ben Racicot
3
es funktioniert auch nicht in der Windows-Eingabeaufforderung
phuclv

Antworten:

360

In den Tagen der physischen Terminals gab es keine sitzungsweiten Zwischenablagen, nur wenige Programme unterstützten internes Kopieren / Einfügen - häufig unter dem Namen "Puffer" oder "Kill Rings" - und verwendeten verschiedene Tastenanschläge. Zum Beispiel verwendet die Bash- Shell CtrlKoder, um CtrlUzu "töten" (ausschneiden), um CtrlYzu "reißen" (einfügen); dies kommt aus dem Emacs - Editor .

CtrlCFast überall in Unix wurde die "Interrupt" -Taste verwendet, um das aktuelle Programm oder den aktuellen Vorgang abzubrechen. Der CtrlVSchlüssel bedeutete oft "wörtlich einfügen" - das heißt, das folgende Zeichen wird wörtlich eingefügt, ohne dass eine zugehörige Aktion ausgeführt wird. Beispielsweise wechselt ein normaler EscBenutzer im vi- Editor in den Befehlsmodus CtrlV, Escfügt jedoch das ESCZeichen in das Dokument ein.

Das CtrlCKopieren und CtrlVEinfügen aus der sitzungsweiten Zwischenablage wurde 1983 von Mac OS und 1990 von Microsoft Windows 3.x eingeführt. (Frühere Windows-Versionen (1.x und 2.x) sowie IBM OS / 2 , unterstützte nur die IBM CUA- Schlüssel CtrlInszum Kopieren und ShiftInsEinfügen; diese Verknüpfungen werden weiterhin von allen Windows-Versionen unterstützt.)

Als GUIs mit Zwischenablage-Unterstützung endlich Unix erreichten, wurden die CtrlTastendrücke bereits von vielen Terminalprogrammen verwendet. Außerdem hatte die grafische Oberfläche von X etwas andere Mechanismen : "Auswahlen" und "Puffer ausschneiden". Schon jetzt können Sie Text in einem Programm markieren und mit der mittleren Maustaste einfügen, ohne explizite Kopieraktion.

Kurz gesagt, zu dem Zeitpunkt, als Xterm und GNOME Terminal geschrieben wurden (ich nehme an, Sie verwenden das letztere), hatten sie CtrlV bereits seit vielen Jahren eine völlig andere Bedeutung und konnten nicht geändert werden. Darüber hinaus gab es in X11 bereits eine alternative Methode zum Kopieren von Text - die "Auswahl" -, sodass das explizite Kopieren / Einfügen wahrscheinlich nicht so wichtig war wie in Windows. Dies bedeutet, dass verschiedene Tastaturkürzel ausgewählt werden mussten - beispielsweise die meisten modernen Terminalprogramme, wie GNOME Terminal, verwenden CtrlShiftCund CtrlShiftV. (Wenn Sie Xterm verwenden, können dieselben Verknüpfungen mithilfe der XResource für XTerm * vt100 * -Übersetzungen manuell hinzugefügt werden . Rxvt verfügt nicht über eine solche Option.)

(Die meisten X11 - Toolkits unterstützen auch die CUA - Schlüssel "Kopieren" und "Einfügen", die nicht mit Terminalprogrammen in Konflikt stehen. Leider sind die Implementierungen eher inkonsistent - CtrlInsKopien in die "Zwischenablage" in den meisten Programmen (GTK, Qt4, aber von ignoriert) Xaw); allerdings werden ShiftInsin den meisten GTK- und Qt4-Programmen Pasten aus der "primären Auswahl", in Firefox jedoch aus der "Zwischenablage" und in den jetzt veralteten Cut-Puffern in Xaw eingefügt.)


Alles , was gesagt, einige Endgeräte oder Konsolen (insbesondere die Windows - 10 - Konsole) tun diese Tasten unterstützen. Da die Windows-Konsole immer einen separaten "Mark / Select" -Modus hatte, hat sie CtrlCjetzt auch zwei Bedeutungen, die auf dem Kontext basieren: Im regulären Modus sendet sie einen Interrupt, im Auswahlmodus kopiert sie in die Zwischenablage (wie Enterfrüher).

Inzwischen Tools Windows - Befehlszeilen nie wirklich verwendet CtrlV für alles, so wurde es gebunden „Paste“ , ohne viel etwas zu stören. Dasselbe auf Unix-ähnlichen Terminals zu tun, wäre jedoch problematischer.

Grawity
quelle
10
Hmm. In Vim bedeutet „Ruck“ eher Kopieren als Einfügen. Dies scheint auch sinnvoller zu sein. Sind Sie sich über die Bedeutung dieses Begriffs hier sicher?
Konrad Rudolph
11
Ja, ich bin mir sicher. Bash erbt die Standardverknüpfungen von ihren Emacs-Entsprechungen .
Grawity
4
@grawity: Dein letzter Kommentar ist ein bisschen fehlgeleitet. Bash bietet zwei Modi für die Befehlszeilenbearbeitung, den VIM-Modus und den Emacs-Modus. Es kommt nur vor, dass der Emacs-Modus bei den meisten Installationen der Standard ist. Dies führt zu Zweideutigkeiten bei der Verwendung des Begriffs „ Ruckeln“ , auch für Bash.
Rahmu
1
Aha! Ich wusste, dass die Vimperator-Entwickler bei der Umstellung <C-v>auf iVersion 3 einen Fehler gemacht haben , aber ich konnte nicht genau sagen, warum .
Izkata
2
@Colin: Du hast immer noch den Unterschied zwischen Zwischenablage und X-Auswahl übersehen. Es gibt mehrere Auswahlmöglichkeiten (PRIMARY, SECONDARY, CLIPBOARD), aber nur eine davon wird normalerweise als "Zwischenablage" bezeichnet - die CLIPBOARD-Auswahl, da hier Strg-C kopiert und von dort Strg-V eingefügt wird. Die primäre Auswahl ist nicht die Zwischenablage.
Grawity
47

Verwenden Sie CtrlShiftVzum Einfügen.

Ctrl mit anderen Zeichen wird von der Shell normalerweise für spezielle Funktionen verwendet.

Akash
quelle
4
Warum registriert Linux nicht stattdessen STRG + UMSCHALT für spezielle Funktionen? Ich denke, Copy-Paste ist für manche Benutzer typischer als diese speziellen Funktionen, oder?
Yasser Zamani
22
Shells gab es schon lange, bevor es grafische Terminals und GUIs mit Ausschneiden und Einfügen gab. Ihr Argument ist also nicht wirklich gültig. @ YasserZamani
slhck
9
Strg + Umschalt + V wird vom Terminalemulator ausgeführt (vorausgesetzt, Sie verwenden GNOME-Terminal) und nicht von bashsich aus. Wenn Sie sich jemals außerhalb einer GUI-Umgebung befinden oder einen anderen Term-Emulator verwenden, funktioniert dies wahrscheinlich nicht. Denken Sie nicht, dass dieser Befehl portierbar ist.
Rahmu
@rahmu Oh, hatte keine Ahnung davon. Verwenden Sie nur Standard-Ubuntu-Installationen. Gibt es einen universellen Befehl?
Akash
2
Wahrscheinlich gibt es keine, um auf die Zwischenablage zuzugreifen (nur Umschalt + Eingabetaste für die primäre Auswahl). Sogar die Zwischenablage selbst ist eine X11-Sache, auf die von tty aus nicht zugegriffen werden kann. Strg + Umschalt + V wird jedoch von GNOME-Terminal, Xfce4-Terminal und KDE-Konsole unterstützt. Dies deckt die gängigsten GUI-Umgebungen ab.
Grawity
20

Hier sind Ihre allgemeinen Einstellungen zum Kopieren und Einfügen mit gängigen Terminals:

gnome-terminal (am beliebtesten unter Linux)
Kopieren : CtrlShiftC
Einfügen : CtrlShiftV
Hinweis : Auswählen zum Kopieren und middle-clickEinfügen funktioniert ebenfalls, es wird jedoch eine alternative Zwischenablage verwendet.

PuTTY (populärste Terminal in Windows)
Kopieren : (wählen Sie mit der Maus, keine Tastatur - Interaktion)
Paste : Right-click (oder zuverlässiger: shiftRight-click)
Hinweis : Apps , die Mauseingabe nehmen (wie vimund links) kann stehlen Right-click- shiftRight-clickimmer in jedem App arbeiten.

OSX-Terminal-
Kopie : AppleC
Einfügen : AppleV
Hinweis: Apps, die die Maussteuerung übernehmen (wie vimund links), setzen möglicherweise außer Kraft, was das Auswählen von Text bedeutet. In diesem Fall funktioniert das Kopieren nicht so, wie Sie es erwarten. Halten ControlSie in diesen Fällen die Maustaste gedrückt, um eine Auswahl zu treffen. Die Mausinteraktion mit Apps ist in Ihren Terminaleinstellungen standardmäßig deaktiviert, sodass die meisten Benutzer nicht einmal darüber informiert sind.

tylerl
quelle
Ist cmd.exePuTTY unter Windows nicht beliebter? :-)
Ben
@Ben Nicht als SSH-Terminal.
tylerl
1
Nein, cmd.exeist kein SSH-Terminal. Das ist sehr wahr
Ben
3
@ Ben: Es ist überhaupt kein Terminal - nur eine Shell. Das Standardterminal in Windows ist die Komponente "Windows Console" von csrss.
Grawity
@Ben, aber Rechtsklick zum Einfügen funktioniert auch cmd.exeim Schnellbearbeitungsmodus (und ist der einzige Weg dorthin, wenn Sie Menü> Bearbeiten> Einfügen nicht öffnen möchten) . Es gibt keine Verknüpfung in der Eingabeaufforderung vor
Win10
17

Es ist eine tief verwurzelte Tradition, dass der CtrlSchlüssel zusammen mit einem Buchstaben ASCII-Steuerzeichen generiert, die durch Subtrahieren von 64 vom ASCII-Wert des Großbuchstabens ermittelt werden. Diese Berechnung bildet Ctrl- Abis 1, und so weiter. Zum Beispiel Ctrl- Iist Tabund Ctrl- Jist Zeilenvorschub.

Es gibt keine ähnliche Tradition Ctrl- Shift. CtrlEs wird nicht erwartet, dass - Shift- Veinen bestimmten Charakter erzeugt.

Terminalemulatoren müssen die Tradition unterstützen, indem sie die CtrlKonvention transparent durchlaufen und sie als Zeicheneingabe für die Programme erscheinen lassen, die über dieses Terminalfenster ausgeführt werden. Terminal-basierte Programme ordnen Steuertasten Befehlen zu. Zum Beispiel verwendet Bash Ctrl- Vals Befehl, was bedeutet "das nächste Zeichen wörtlich nehmen". Auf diese Weise können Sie ein Steuerzeichen in die Befehlszeile einbetten. Wenn das Terminal Steuertasten für den eigenen Gebrauch stiehlt, sind solche Befehle nicht mehr verfügbar. Abfangen Ctrl- Vfür eine Meta-Funktion kommt das nicht in Frage (zumindest in einer Standardkonfiguration).

Terminalemulatoren können jedoch frei abfangen Ctrl- Shift- Vwas voraussichtlich kein Zeichen erzeugt. Ctrl- Shift- Vist kein Standard; Es ist eine Gnome-Terminal-Sache (die in einigen anderen Terminals sein kann).

Auf X-basierten Unix-Desktops ist die Konvention, dass zum Kopieren kein Befehl erforderlich ist. Sie wählen nur den Text aus. Mit der mittleren Schaltfläche wird der Text an einer anderen Stelle eingefügt. Sie werden feststellen, dass es in Xterm, Gnome Terminal und Firefox gleichermaßen funktioniert.

Ctrl- Vist eine Microsoft Windows-Konvention, die eine Nachahmung von Apple- Vauf dem Macintosh ist.

Kaz
quelle
3
Es ist nicht gerade eine Subtraktion - traditionell hat Strg das 6. und 7. Bit des Zeichens gelöscht ; Aus diesem Grund funktioniert Strg + Umschalt + Buchstabe in den meisten Terminals identisch mit Strg + Buchstabe (es sei denn, es wird ausdrücklich vom Terminal überschrieben, wie im Fall von Tastenkombinationen zum Kopieren / Einfügen).
Grawity
1
Da die Schlüssel in Bezug auf den ASCII-Standard im Wesentlichen in zufälliger Reihenfolge angeordnet sind, enthält das Programm-ROM mehrere Nachschlagetabellen, die bei der Erzeugung der ASCII-Codes helfen. ... Wenn Sie die CONTROL-Taste gedrückt halten, wird eine weitere Tabellensuche ausgeführt. [Technisches Handbuch, Serie VT100, 4.4.9.3, Digital].
Kaz
1
@Linger danke für die Bearbeitung. Es wird gut gerendert, aber ich schreibe auf keinen Fall all diese <kbd>Tags in zukünftige Posts.
Kaz
Ctrl-Aist 1. Wie kann ich das probieren? Mein Gnome-Terminal tut nichts, wenn ich drücke Ctrl-A.
Robert
3

Für mich ist der einfachste Weg, Paste in die Shell zu kopieren:

Wählen Sie den gewünschten Code aus und fügen Sie ihn durch Klicken auf ein mouse-middle-key

Pedro Lobito
quelle
1
Solange Sie eine mittlere Maustaste haben.
JPIerson
1
@jpierson nicht, dass ich dies nachdrücklich empfehle, aber Sie können ein kleines Skript schreiben, das einfach verwendet wird xdotool click 2, um den Klick auf die dritte Schaltfläche für Sie zu emulieren. Dann in welchem Fenstermanager / Desktop - Umgebung , die Sie in sind, können Sie dieses Skript in eine Taste binden kann - sagen mod i(für Einsatz) oder keybindings was auch immer können Sie zur Verfügung haben (oder was auch immer mod bedeuten könnte - was wirklich hängt , wo Sie diese binden)
dylnmc
2

Wir können die Schaltfläche zum Einfügen der Tastatur zum Kopieren und Einfügen verwenden (in alten Tastaturen kann es fehlen)

Kopieren : CtrlInsert
Einfügen :CtrlShiftInsert

Bharat
quelle
1

Sie können auch die mittlere Taste und eine Maus verwenden, wenn Sie sich faul fühlen und einen Befehl aus einem Textdokument, einem Skript, einem Web oder einem Forum auswählen. Sobald Sie den gewünschten Befehl ausgewählt haben, bewegen Sie sich einfach zu Ihrem Terminal und klicken Sie auf die mittlere Maustaste. Ich benutze diese Methode, da ich Welpen-Linux verwende, das das normale Verhalten von Rechtsklick und Einfügen nicht zu unterstützen scheint. Dies geschieht in einem Datei-Handler-Fenster, nur nicht in einem Terminal-Fenster. Ich weiß nicht warum, aber ich bin sehr froh, dass ich etwas über die mittlere Tastenmethode herausgefunden habe. Sehr praktisch! ;-)

m1cha3ll0w3
quelle