2012-05-07 07:44:30 +0000 2012-05-07 07:44:30 +0000
196
196

Waarom plakt Ctrl + V niet in Bash (Linux-shell)?

Wanneer Ik kopieer iets naar het klembord en druk op Ctrl + V in Bash, er gebeurt niets; Echter, rechtsklikken en het selecteren van Paste doet het werk.

Waarom? Zit er een redelijk probleem (ik weet zeker dat het er is) achter dit gedrag in Linux?

Antwoorden (7)

364
364
364
2012-05-07 08:03:14 +0000

In de dagen van de fysieke terminals bestonden er geen sessiebrede klemborden, slechts enkele programma’s ondersteunden intern kopiëren/plakken - vaak onder de naam “buffers” of “kill rings” - en gebruikten verschillende toetsaanslagen. De bash shell gebruikt bijvoorbeeld CtrlK of CtrlU om te “doden” (knippen), CtrlY om te “rukken” (plakken); dit komt van de emacs editor .

CtrlC was bijna overal in Unix de “interrupt”-toets , die werd gebruikt om het huidige programma of de huidige bewerking te annuleren. De CtrlV-toets betekende vaak “verbatim insert” - dat wil zeggen, het volgende teken letterlijk invoegen zonder een bijbehorende actie uit te voeren. Bijvoorbeeld, een normale Esc schakelt over naar de commandomodus in de vi editor, maar CtrlV, Esc voegt het teken ESC in het document in.

Het gebruik van CtrlC om te kopiëren en CtrlV om te plakken van het sessiebrede klembord werd geïntroduceerd door Mac OS in 1983 en Microsoft Windows 3.x in 1990. (Eerdere Windows versies (1.x en 2.x), evenals IBM OS/2, ondersteunden alleen de IBM CUA toetsen CtrlIns om te kopiëren en ShiftIns om te plakken; deze snelkoppelingen blijven door alle Windows versies ondersteund.)

Toen GUI’s met klembordondersteuning eindelijk Unix bereikten, waren de Ctrl-toetsentoetsen al in gebruik door vele terminalprogramma’s. Bovendien had de grafische X-interface enigszins verschillende mechanismen : “selecties” en “cut buffers”. Zelfs nu kunt u tekst in één programma selecteren en invoegen met de middelste muisknop, zonder enige expliciete kopieeractie.

Kortom, tegen de tijd dat Xterm en GNOME Terminal werden geschreven (ik neem aan dat u de laatste gebruikt), had CtrlV al jarenlang een heel andere betekenis en kon het niet meer worden veranderd. Bovendien was een alternatieve methode om tekst te kopiëren - de “selectie” - al aanwezig in X11, dus een expliciete kopieer/plakactie werd waarschijnlijk niet zo belangrijk geacht als in Windows. Dit betekent dat er verschillende sneltoetsen moesten worden geselecteerd - bijvoorbeeld, de meeste moderne terminalprogramma’s, zoals GNOME Terminal, gebruiken CtrlShiftC en CtrlShiftV. (Als u Xterm gebruikt, kunnen dezelfde snelkoppelingen handmatig worden toegevoegd met behulp van de _XTerm*vt100*translations Xresource. Rxvt heeft een dergelijke optie niet.)

(De meeste X11 toolkits ondersteunen ook de CUA “kopieer” en “plak” toetsen, die niet in strijd zijn met terminal programma’s. Helaas zijn de implementaties nogal inconsistent - CtrlIns kopieert naar het “klembord” in de meeste programma’s (GTK, Qt4, maar genegeerd door Xaw); ShiftIns plakt echter uit de “primaire selectie” in de meeste GTK en Qt4 programma’s, maar uit “klembord” in Firefox, en uit de nu-verouderde cut-buffers in de nu-verouderde Xaw. )

  • *

Dit alles gezegd hebbende, sommige terminals of consoles (in het bijzonder de Windows 10 console) do ondersteunen deze toetsen. Aangezien de Windows console altijd een aparte “mark/select” modus had, heeft CtrlC nu ook twee betekenissen gebaseerd op context - in normale modus stuurt het een interrupt, in select modus kopieert het naar het klembord (net zoals Enter gewend was).

Ondertussen hebben de Windows command-line tools nooit echt gebruikt CtrlV voor iets, dus het was gebonden aan “plakken” zonder veel te storen. Hetzelfde doen op Unix-achtige terminals zou echter problematischer zijn.

48
48
48
2012-05-07 07:45:55 +0000

Gebruik CtrlShiftV voor het plakken.

Ctrl met andere chars wordt meestal door de shell gebruikt voor speciale functies.

21
21
21
2012-05-07 21:22:43 +0000

Hier zijn uw algemene instellingen voor het maken van kopieerpasta’s met populaire terminals:

gnome-terminal (meest populair op Linux) Copy : CtrlShiftC Paste : CtrlShiftV Aanwijzing : Select-to-copy en middle-click to paste werkt ook, maar het gebruikt een alternatief klembord.

PuTTY (populairste terminal in Windows) Copy : (selecteren met muis, geen toetsenbordinteractie) Paste : Rechtsklik (of betrouwbaarder: shiftRechtsklik) Aanwijzing : Apps die muisinvoer nemen (zoals vim en links) kunnen rechtsklikken stelen – shiftRight-click werkt altijd in elke app.

OSX Terminal Kopiëren : AppleC Paste : AppleV Note: Apps die de muisbesturing overnemen (zoals vim en links) kunnen overschrijven wat het betekent om tekst te selecteren, in welk geval het kopiëren niet zal werken zoals je verwacht. In die gevallen houdt u Control ingedrukt terwijl u de muis versleept om te selecteren. De muisinteractie met apps is standaard uitgeschakeld in uw terminalinstellingen, dus de meeste mensen zullen dit niet eens weten.

17
17
17
2012-05-07 14:34:50 +0000

Het is een diepgewortelde traditie dat de Ctrl-toets samen met een letter ASCII-controlekarakters genereert door 64 af te trekken van de ASCII-waarde van de hoofdletter. Deze berekening brengt Ctrl-A naar 1 in kaart, enzovoort. Bijvoorbeeld Ctrl-I is Tab en Ctrl-J is linefeed.

Er is geen soortgelijke traditie voor Ctrl-Shift. Er wordt niet verwacht dat Ctrl-Shift-V een specifiek karakter produceert.

Terminal emulatoren moeten de traditie ondersteunen door transparant door de Ctrl conventie te gaan en het te laten verschijnen als tekeninvoer voor de programma’s die via dat terminalvenster worden bediend. Terminal-gebaseerde programma’s brengen de bedieningstoetsen van de commando’s in kaart. Bash gebruikt bijvoorbeeld Ctrl-V als een commando wat betekent “neem het volgende teken letterlijk”. Hierdoor kunt u een controleteken in de opdrachtregel insluiten. Als de terminal besturingstoetsen steelt voor eigen gebruik, worden dergelijke commando’s niet meer beschikbaar. Het onderscheppen van Ctrl-V voor een meta-functie is dus uit den boze (tenminste in een standaardconfiguratie).

De terminalemulatoren zijn echter vrij om Ctrl-Shift-V te onderscheppen, waarvan niet verwacht wordt dat ze een karakter genereren. Ctrl-Shift-V is geen standaard; het is een Gnome Terminal ding (dat in sommige andere terminals kan zitten).

Op X-gebaseerde Unix desktops is de conventie dat er geen commando nodig is om te kopiëren. U hoeft alleen maar de tekst te selecteren. En de middelste knop plakt die tekst elders. Je zult zien dat het werkt in Xterm, Gnome Terminal en Firefox.

Ctrl-V is een Microsoft Windows conventie, die een imitatie is van Apple-V van de Macintosh.

3
3
3
2015-08-03 12:57:48 +0000

Voor mij is de eenvoudigste manier om de plaklaag te kopiëren in de shell:

Selecteer de code die u wilt en plak deze vervolgens door te klikken op de muis-midden-toets

2
2
2
2015-05-08 13:42:05 +0000

We kunnen de toets insert keyboard gebruiken om te kopiëren en te plakken (in oude toetsenborden kan het ontbreken)

Kopiëren : CtrlInsert Paste : CtrlShiftInsert

1
1
1
2015-05-19 16:08:05 +0000

u kunt ook de middelste knop een muis gebruiken als u zich lui voelt en een opdracht selecteren uit een tekstdocument, script of web of forum. als u de beoogde opdracht eenmaal hebt geselecteerd, gaat u gewoon naar uw terminal en klikt u op de middelste knop van de muis. Ik gebruik deze methode omdat ik puppy linux gebruik, wat niet het normale gedrag van rechts klikken en plakken lijkt te ondersteunen. het doet in een file handler venster, alleen niet in een terminal venster. weet niet waarom, maar ik ben rustig blij dat ik de middelste knop methode heb ontdekt, erg handig! ;-)