it-swarm.com.de

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

Wenn ich etwas in die Zwischenablage kopiere und drücke Ctrl + V in Bash 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?

184
Yasser Zamani

In den Tagen des 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 CtrlK oder CtrlU "töten" (schneiden), CtrlY zu "reißen" (einfügen); Dies kommt von dem Emacs Editor .

CtrlC Fast überall in Unix wurde die "Interrupt" -Taste verwendet, um das aktuelle Programm oder den aktuellen Vorgang abzubrechen. Das CtrlV Schlü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. Zum Beispiel ein normaler Esc wechselt in den Befehlsmodus im vi Editor, aber CtrlVEsc fügt das Zeichen ESC in das Dokument ein.

Die Verwendung von CtrlC zu kopieren und CtrlV Das Einfü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ützten nur die - IBM CUA Schlüssel CtrlIns zu kopieren und ShiftIns einfügen; Diese Verknüpfungen werden weiterhin von allen Windows-Versionen unterstützt.)

Als GUIs mit Zwischenablage-Unterstützung endlich Unix erreichten, wurde die Ctrl Tastendrücke wurden bereits von vielen Terminalprogrammen verwendet. Außerdem hatte die grafische X-Oberfläche etwas nterschiedliche Mechanismen : "Auswahl" 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 der Zeit, als Xterm und GNOME Terminal geschrieben wurden (ich nehme an, Sie verwenden letzteres), CtrlV  hatte bereits seit vielen Jahren eine völlig andere Bedeutung und konnte nicht mehr 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 - zum Beispiel die meisten modernen Terminalprogramme wie GNOME Terminal CtrlShiftC und CtrlShiftV. (Wenn Sie Xterm verwenden, können dieselben Verknüpfungen mithilfe der XTerm * vt100 * -Übersetzungen Xresource 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 - CtrlIns kopiert in die "Zwischenablage" in den meisten Programmen (GTK, Qt4, aber von Xaw ignoriert); jedoch, ShiftIns Einfügen aus der "primären Auswahl" in den meisten GTK- und Qt4-Programmen, aber aus der "Zwischenablage" in Firefox und aus den jetzt veralteten Schnittpuffern im jetzt veralteten Xaw.)


Trotzdem unterstützen einige Terminals oder Konsolen (insbesondere die Windows 10-Konsole) diese Tasten . Da die Windows-Konsole immer einen separaten "Mark/Select" -Modus hatte, CtrlC hat nun auch zwei kontextabhängige Bedeutungen - im regulären Modus sendet es einen Interrupt, im Auswahlmodus kopiert es in die Zwischenablage (genau wie Enter gewöhnt an).

In der Zwischenzeit wurden Windows-Befehlszeilentools nie wirklich verwendet  CtrlV für alles, so war es gebunden, ohne viel etwas zu stören "einfügen". Dasselbe auf Unix-ähnlichen Terminals zu tun, wäre jedoch problematischer.

350
grawity

Benutzen CtrlShiftV zum Einfügen.

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

45
Akash

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

Gnome-Terminal (am beliebtesten unter Linux)
KopieCtrlShiftC
EinfügenCtrlShiftV
Hinweis: Zum Kopieren auswählen und middle-click Das Einfügen funktioniert auch, es wird jedoch eine alternative Zwischenablage verwendet.

PuTTY (beliebtestes Terminal in Windows)
Kopieren: (Auswahl mit der Maus, keine Tastaturinteraktion)
EinfügenRight-click (oder zuverlässiger: shiftRight-click)
Hinweis: Apps, die Mauseingaben akzeptieren (wie vim und links), können stehlen Right-click - shiftRight-click wird immer in jeder App funktionieren.

OSX-Terminal
KopieAppleC
EinfügenAppleV
Hinweis: Apps, die die Maussteuerung übernehmen (wie vim und links), können die Bedeutung der Textauswahl außer Kraft setzen. In diesem Fall funktioniert das Kopieren nicht so, wie Sie es erwarten. Halten Sie in diesen Fällen gedrückt Control während Sie die Maus ziehen, um auszuwählen. Die Mausinteraktion mit Apps ist in Ihren Terminaleinstellungen standardmäßig deaktiviert, sodass die meisten Benutzer nicht einmal darüber informiert sind.

17
tylerl

Es ist eine tief verwurzelte Tradition, dass die Ctrl Schlüssel zusammen mit einem Buchstaben erzeugt ASCII Steuerzeichen, die durch Subtrahieren von 64 vom ASCII Wert des Großbuchstabens gefunden werden. Diese Berechnung kartiert Ctrl-A zu 1 und so weiter. Zum Beispiel Ctrl-I ist Tab und Ctrl-J ist Zeilenvorschub.

Es gibt keine ähnliche Tradition für Ctrl-ShiftCtrl-Shift-V Es wird nicht erwartet, dass ein bestimmter Charakter entsteht.

Terminal-Emulatoren müssen die Tradition unterstützen, indem sie transparent durch das Internet gehen Ctrl Konvention, so dass es als Zeicheneingabe für die Programme erscheint, die über dieses Terminalfenster bedient werden. Terminal-basierte Programme ordnen Steuertasten Befehlen zu. Zum Beispiel verwendet Bash Ctrl-V als Befehl, der bedeutet "nimm das nächste Zeichen wörtlich". 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. Also abfangen Ctrl-V für eine Meta-Funktion kommt das nicht in Frage (zumindest in einer Standardkonfiguration).

Terminalemulatoren können jedoch frei abfangen Ctrl-Shift-V welches nicht erwartet wird, um einen Buchstaben zu erzeugen. Ctrl-Shift-V ist 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-V ist eine Microsoft Windows-Konvention, die eine Nachahmung von Apple-V vom Macintosh.

16
Kaz

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

Wählen Sie den gewünschten Code aus und fügen Sie ihn ein, indem Sie auf die Schaltfläche klicken mouse-middle-key

3
Pedro Lobito

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

KopieCtrlInsert
EinfügenCtrlShiftInsert

2
Bharat

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 Puppy 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 freue mich sehr, dass ich etwas über die mittlere Taste herausgefunden habe. Sehr praktisch! ;-)

1
m1cha3ll0w3