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


Wenn ich etwas in die Zwischenablage kopiere und drücke Strg + V in Bash passiert nichts; Rechtsklicken und auswählen Einfügen macht den Job.

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


169
2018-05-07 07:44


Ursprung


Shift-Insert funktioniert auch - bonyiii
ich bevorzuge Ctrl-Shift-V, persönlich. - amalloy
Sie können auch verwenden Umschalt + Einfügen in den meisten Shell-Umgebungen. - Fabian
Was ist, wenn Sie keine Insert-Taste haben? - Ben Racicot
Es funktioniert auch nicht in Windows-Eingabeaufforderung - phuclv


Antworten:


In den Tagen der physischen TerminalsSession-weite Zwischenablagen gab es nicht, nur wenige Programme unterstützten internes Kopieren / Einfügen - oft unter dem Namen "Puffer" oder "Töte Ringe" - und verwendeten verschiedene Tastenanschläge. Zum Beispiel, die bash Shell verwendet StrgK oder StrgU "töten" (schneiden), StrgY "reißen" (einfügen); das kommt von das Emacs Editor.

StrgC fast überall in Unix war das "Interrupt" -Taste, um das aktuelle Programm oder die aktuelle Operation abzubrechen. Das StrgV Schlüssel bedeutet oft "wortwörtlich einfügen" - das heißt, fügen Sie das folgende Zeichen wörtlich ein, ohne eine zugehörige Aktion auszuführen. Zum Beispiel, ein normales Esc wechselt in den Befehlsmodus in der vi Editor, aber StrgV, Esc wird das einfügen ESC Zeichen in das Dokument.

Die Verwendung von StrgC kopieren und StrgV Das Einfügen aus der sitzungsweiten Zwischenablage wurde von Mac OS 1983 und Microsoft Windows 3.x 1990 eingeführt. (Frühere Windows-Versionen (1.x und 2.x) sowie IBM OS / 2 unterstützten nur die IBM CUA Schlüssel StrgIns kopieren und VerschiebungIns einfügen; Diese Verknüpfungen werden von allen Windows-Versionen unterstützt.)

Wenn GUIs mit Clipboard - Unterstützung endlich Unix erreicht haben, wird der Strg Tastenanschläge wurden bereits von vielen Terminalprogrammen benutzt. Außerdem hatte das X grafische Interface etwas verschiedene Mechanismen: "Auswahlen" und "Puffer ausschneiden". Auch jetzt können Sie Text in einem Programm auswählen und mit der mittleren Maustaste ohne explizite Kopieraktion einfügen.

Kurz gesagt, zu der Zeit, als Xterm und GNOME Terminal geschrieben wurden (ich nehme an, Sie benutzen letzteres), StrgV  hatte schon eine ganz andere Bedeutung für viele Jahre und konnte nicht geändert werden. Außerdem war eine alternative Methode zum Kopieren von Text - die "Auswahl" - bereits in X11 vorhanden, so dass eine explizite Copy / Paste-Aktion 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, verwenden StrgVerschiebungC und StrgVerschiebungV. (Wenn Sie Xterm verwenden, können dieselben Shortcuts manuell über die Schaltfläche " XTerm * vt100 * Übersetzungen XResource. Rxvt hat keine solche Option.)

(Die meisten X11-Toolkits unterstützen auch die CUA- "Kopieren" - und "Einfügen" -Schlüssel, die nicht mit Terminalprogrammen in Konflikt stehen. Leider sind die Implementierungen ziemlich inkonsistent - StrgIns Kopien in die "Zwischenablage" in den meisten Programmen (GTK, Qt4, aber von Xaw ignoriert); jedoch, VerschiebungInsPasten aus der "primären Auswahl" in den meisten GTK- und Qt4-Programmen, aber aus "Zwischenablage" in Firefox und aus den jetzt veralteten Schnittpuffern in der jetzt veralteten Xaw.)


All das gesagt, einige Terminals oder Konsolen (insbesondere die Windows 10 Konsole) machen Unterstütze diese Schlüssel. Da die Windows-Konsole immer einen separaten "mark / select" -Modus hatte, StrgC hat jetzt auch zwei Bedeutungen basierend auf dem Kontext - im regulären Modus sendet es einen Interrupt, im Select - Modus kopiert es in die Zwischenablage (genau wie Eingeben gewöhnt an).

In der Zwischenzeit Windows-Kommandozeilen-Tools nie wirklich benutzt  StrgV für alles, also musste es "einfügen" ohne viel zu stören. Das Gleiche unter Unix-ähnlichen Terminals wäre jedoch problematischer.


332
2018-05-07 08:03



Hmm. In Vim bedeutet "jagen" Kopieren statt Einfügen. Dies scheint auch mehr Sinn zu machen. Sind Sie sich über die Bedeutung dieses Begriffs hier sicher? - Konrad Rudolph
Ja, ich bin mir sicher. Bash erbt die Standard-Verknüpfungen von ihre Emacs-Äquivalente. - grawity
@Grawity: Dein letzter Kommentar ist ein bisschen irreführend. Bash bietet zwei Modi zur Bearbeitung von Befehlszeilen, vim-mode und emacs-mode. Es passiert einfach, dass der Emacs-Modus bei den meisten Installationen der Standard ist. Dies führt zu Mehrdeutigkeit bei der Verwendung des Begriffs Rucksogar für bash. - rahmu
Aha! ich wusste Die Vimperator-Entwickler haben beim Wechsel einen Fehler gemacht <C-v> zu i in der Version 3, aber ich konnte nicht richtig sagen Warum. - Izkata
@Colin: Du hast den Unterschied zwischen Zwischenablage und X-Auswahl immer noch vermisst. Es gibt mehrere Auswahlmöglichkeiten (PRIMÄR, SEKUNDÄR, CLIPBOARD), aber nur eine davon wird normalerweise als "Zwischenablage" bezeichnet - die CLIPBOARD-Auswahl, weil hier CTRL-C kopiert wird, und hier wird Ctrl-V eingefügt. Die primäre Auswahl ist nicht die Zwischenablage. - grawity


Benutzen StrgVerschiebungV zum Einfügen.

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


41
2018-05-07 07:45



Warum also Linux nicht STRG + SHIFT für spezielle Funktionen registriert? Ich denke Copy-Paste ist bei manchen Benutzern eher typisch als die speziellen Funktionen, oder? - Yasser Zamani
Shells gab es schon lange bevor es grafische Terminals und GUIs mit Funktionen zum Ausschneiden und Einfügen gab. Ihr Argument ist also nicht wirklich gültig. @ YasserZamani - slhck
Strg + Umschalt + V wird vom Terminal-Emulator ausgeführt (vorausgesetzt, Sie verwenden das GNOME-Terminal) und nicht von bashselbst. Wenn Sie sich jemals außerhalb einer GUI-Umgebung befinden oder wenn Sie einen anderen Terminalemulator verwenden, wird dies wahrscheinlich nicht funktionieren. Denke nicht, dass dieser Befehl tragbar ist. - rahmu
@ Rahmu Oh, hatte keine Ahnung davon. Verwenden Sie nur Ubuntu-Installationen. Gibt es einen universellen Befehl? - Akash
Es gibt wahrscheinlich keinen Zugriff auf die Zwischenablage (nur Shift + Ins für die primäre Auswahl). Sogar die Zwischenablage selbst ist eine X11-Sache, die von tty's nicht zugänglich ist. Strg + Umschalt + V wird jedoch von GNOME Terminal, Xfce4 Terminal, KDE Konsole unterstützt; Dies umfasst die gängigsten GUI-Umgebungen. - grawity


Hier finden Sie Ihre allgemeinen Kopiereinstellungen mit beliebten Terminals:

gnome-terminal (am beliebtesten unter Linux)
Kopieren: StrgVerschiebungC
Einfügen: StrgVerschiebungV
Hinweis: Wählen Sie zum Kopieren und Mittelklick Einfügen funktioniert auch, aber es verwendet eine alternative Zwischenablage.

PuTTY (beliebtestes Terminal in Windows)
Kopieren: (Wählen Sie mit der Maus, keine Tastaturinteraktion)
Einfügen: Rechtsklick  (oder zuverlässiger: VerschiebungRechtsklick)
Hinweis: Apps mit Mauseingabe (wie vim und links) kann stehlen Rechtsklick - VerschiebungRechtsklick wird immer in jeder App funktionieren.

OSX-Terminal
Kopieren: ApfelC
Einfügen: ApfelV
Hinweis: Apps, die Maussteuerung übernehmen (wie vim und links) kann überschreiben, was es bedeutet, Text auszuwählen, in diesem Fall funktioniert die Kopie nicht so, wie Sie es erwarten. In diesen Fällen halten Sie gedrückt Steuerung während Sie die Maus ziehen, um auszuwählen. Die Mausinteraktion mit Apps ist in den Terminaleinstellungen standardmäßig deaktiviert, sodass die meisten Benutzer nicht einmal davon wissen.


17
2018-05-07 21:22



Ist es nicht cmd.exe beliebter als PuTTY unter Windows? :-) - Ben
@Ben Nicht als SSH-Terminal. - tylerl
Nein, cmd.exe ist kein SSH-Terminal. Das ist sehr wahr. - Ben
@Ben: Es ist überhaupt kein Terminal - nur eine Shell. Das Standardterminal in Windows ist die Komponente "Windows-Konsole" von CSRSS. - grawity
@Ben aber Rechtsklick zum Einfügen funktioniert auch cmd.exe (und ist der einzige Weg dorthin, wenn Sie nicht das Menü> Bearbeiten> Einfügen) öffnen wollen Schnellbearbeitungsmodus. In der Eingabeaufforderung pre-win10 gibt es keine Verknüpfung - phuclv


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

Es gibt keine ähnliche Tradition für Strg-Verschiebung. Strg-Verschiebung-V Es wird nicht erwartet, dass sie einen bestimmten Charakter hervorbringt.

Terminalemulatoren müssen die Tradition unterstützen, indem sie transparent durch die Strg Konvention, so dass es als Zeicheneingabe für die Programme erscheint, die über dieses Terminalfenster bedient werden. Terminal-basierte Programme ordnen Steuerbefehle Befehlen zu. Zum Beispiel verwendet Bash Strg-V als ein Befehl, der "das nächste Zeichen wörtlich nehmen" bedeutet. Dadurch können Sie ein Steuerzeichen in die Befehlszeile einbetten. Wenn das Terminal Steuerschlüssel für seinen eigenen Gebrauch stiehlt, sind solche Befehle nicht verfügbar. Also abfangen Strg-V für eine Meta-Funktion kommt nicht in Frage (zumindest in einer Standardkonfiguration).

Terminalemulatoren können jedoch abgefangen werden Strg-Verschiebung-VEs wird nicht erwartet, dass ein Zeichen generiert wird. Strg-Verschiebung-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. Und der mittlere Knopf fügt diesen Text woanders hinzu. Sie werden feststellen, dass es in Xterm, Gnome Terminal und Firefox gleichermaßen funktioniert.

Strg-V ist eine Microsoft Windows Konvention, die eine Imitation von ist Apfel-V vom Macintosh.


16
2018-05-07 14:34



Es ist nicht genau Subtraktion - traditionell hat Ctrl löschte die 6. und 7. Bits des Charakters; Aus diesem Grund funktioniert Ctrl + Shift + Letter in den meisten Terminals identisch mit Ctrl + Letter (es sei denn, es wird explizit vom Terminal überschrieben, wie im Fall von Kopieren / Einfügen-Verknüpfungen). - grawity
Da die Schlüssel in Bezug auf den ASCII-Standard im Wesentlichen zufällig angeordnet sind, enthält das Programm-ROM mehrere Nachschlagetabellen, die bei der Erzeugung der ASCII-Codes helfen. ... Wenn die Taste CONTROL gedrückt gehalten wird, während eine andere Taste gedrückt wird, wird eine andere Tabelle gesucht. [Technisches Handbuch VT100, 4.4.9.3, Digital]. - Kaz
@Linger danke für den Schnitt. Es macht schön, aber ich schreibe auf keinen Fall all diese <kbd> Tags in zukünftigen Posts. - Kaz
Ctrl-A ist 1. Wie kann ich das versuchen? Mein Gnome-Terminal macht nichts, wenn ich drücke Ctrl-A. - robert


Wir können die Taste zum Einfügen der Tastatur verwenden, um sie zu kopieren und einzufügen (In alten Tastaturen kann sie fehlen)

Kopieren: StrgEinfügen
Einfügen: StrgVerschiebungEinfügen 


2
2018-05-08 13:42





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

Wählen Sie den gewünschten Code aus und klicken Sie dann auf Maus-Mittel-Taste


2
2017-08-03 12:57



Solange Sie eine mittlere Maustaste haben. - jpierson
@jpierson nicht, dass ich das dringend empfehle, aber Sie können ein kleines Skript schreiben, das einfach verwendet xdotool click 2 um den dritten Knopfklick für Sie zu emulieren. Dann können Sie in jeder Fenstermanager / Desktop-Umgebung, in der Sie sich befinden, dieses Skript an einen Schlüssel binden mod  i (für Insert) oder was auch immer Keybindings zur Verfügung stehen (oder was auch immer Mod bedeuten könnte - was wirklich davon abhängt, wo du das bindst) - dylnmc


Sie können auch den mittleren Knopf und eine Maus benutzen, wenn Sie faul sind und einen Befehl aus einem Textdokument, Skript oder Web oder Forum auswählen. Sobald Sie den gewünschten Befehl ausgewählt haben, wechseln Sie 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. Es tut dies in einem Datei-Handler-Fenster, nur nicht in einem Terminal-Fenster. Ich weiß nicht, warum, aber ich bin zufrieden, dass ich über die mittlere Knopfmethode herausgefunden habe, sehr praktisch! ;-)


1
2018-05-19 16:08