Perché Ctrl + V non viene incollato in Bash (shell Linux)?


192

Quando copio qualcosa negli appunti e premo Ctrl+ Vin Bash, non succede nulla; Tuttavia, facendo clic con il pulsante destro del mouse e selezionando Incolla si esegue il lavoro.

Perché? C'è qualche problema ragionevole (ne sono sicuro) dietro questo comportamento in Linux?


25
Shift- InsertFunziona anche
Bonyiii

33
Preferisco Ctrl-Shift-V, personalmente.
amalloy

3
Puoi anche usare Maiusc + Inserisci nella maggior parte degli ambienti shell.
Fabian,

4
E se non avessi una chiave Inserisci?
Ben Racicot,

3
non funziona anche nel prompt dei comandi di
Windows

Risposte:


360

Ai tempi dei terminali fisici , non esistevano appunti a livello di sessione, solo pochi programmi supportavano il copia / incolla interno - spesso sotto il nome di "buffer" o "kill ring" - e usavano vari tasti diversi. Ad esempio, la shell bash usa CtrlKo CtrlUper "uccidere" (tagliare), CtrlYper "strappare" (incollare); questo viene da l' emacs editor di .

CtrlCquasi ovunque in Unix c'era il tasto "interrompi" , usato per cancellare il programma o l'operazione corrente. La CtrlVchiave spesso significava "inserimento testuale", ovvero inserire letteralmente il seguente carattere senza eseguire alcuna azione associata. Ad esempio, un normale Escpassa al modo nel comando VI editore, ma CtrlV, Escinserirà il ESCcarattere nel documento.

L'uso di CtrlCcopiare e CtrlVincollare dagli appunti a livello di sessione è stato introdotto da Mac OS nel 1983 e Microsoft Windows 3.x nel 1990. (Versioni precedenti di Windows (1.xe 2.x), così come IBM OS / 2 , supportava solo le chiavi IBM CUACtrlIns per copiare e ShiftInsincollare; queste scorciatoie rimangono supportate da tutte le versioni di Windows.)

Quando le GUI con il supporto degli appunti finalmente raggiunsero Unix, i Ctrltasti premuti erano già in uso da molti programmi terminali. Inoltre, l'interfaccia grafica X aveva meccanismi leggermente diversi : "selezioni" e "buffer di taglio". Anche ora puoi selezionare il testo in un programma e inserirlo mediante il pulsante centrale del mouse, senza alcuna azione esplicita di copia.

In breve, quando sono stati scritti Xterm e GNOME Terminal (immagino che tu usi quest'ultimo), CtrlV aveva già un significato completamente diverso per molti anni e non poteva essere cambiato. Inoltre, un metodo alternativo per copiare il testo - la "selezione" - era già presente in X11, quindi l'azione esplicita di copia / incolla era probabilmente considerata non importante come sarebbe in Windows. Ciò significa che dovevano essere selezionate diverse scorciatoie da tastiera - ad esempio, la maggior parte dei programmi di terminale moderni, come GNOME Terminal, usa CtrlShiftCe CtrlShiftV. (Se usi Xterm, le stesse scorciatoie possono essere aggiunte manualmente usando XTerm * vt100 * traduzioni Xresource. Rxvt non ha questa opzione.)

(La maggior parte dei toolkit X11 supporta anche i tasti CUA "copia" e "incolla", che non sono in conflitto con i programmi terminali. Sfortunatamente, le implementazioni sono piuttosto incoerenti - CtrlInscopie negli "appunti" nella maggior parte dei programmi (GTK, Qt4, ma ignorate da Xaw); tuttavia, le ShiftInspaste dalla "selezione primaria" nella maggior parte dei programmi GTK e Qt4, ma dagli "appunti" in Firefox e dai buffer di taglio ormai obsoleti nell'ormai obsoleto Xaw.)


Detto questo, alcuni terminali o console (in particolare, la console di Windows 10) fanno sostenere questi tasti. Poiché la console di Windows ha sempre avuto una modalità "mark / select" separata, CtrlCora ha anche due significati basati sul contesto: in modalità normale invia un interrupt, in modalità select copia negli appunti (proprio come una Entervolta).

Nel frattempo, gli strumenti da riga di comando di Windows non sono mai stati realmente utilizzati CtrlV per nulla, quindi è stato destinato a "incollare" senza disturbare molto. Fare lo stesso con terminali simili a Unix sarebbe tuttavia più problematico.


10
Hmm. In Vim, "yank" significa copia anziché incolla. Anche questo sembra avere più senso. Sei sicuro del significato di questo termine qui?
Konrad Rudolph,

11
Sì sono sicuro. Bash eredita le scorciatoie predefinite dai loro equivalenti Emacs .
Grawity

4
@grawity: il tuo ultimo commento è un po 'sbagliato. Bash offre due modalità di modifica della riga di comando, vim-mode ed emacs-mode. Accade semplicemente che la modalità emacs è l'impostazione predefinita sulla maggior parte delle installazioni. Ciò solleva ambiguità nell'uso del termine yank , anche per bash.
Rahmu,

1
A-ha! Ho saputo che gli sviluppatori Vimperator fatto un errore quando sono passati <C-v>alla iversione 3, ma io non riuscivo a mettere il dito su perché .
Izkata,

2
@Colin: hai ancora perso la distinzione tra appunti e selezione X. Esistono diverse selezioni (PRIMARY, SECONDARY, CLIPBOARD), ma solo una di queste viene generalmente chiamata "appunti" - la selezione CLIPBOARD, perché è lì che Ctrl-C copia e da cui Ctrl-V incolla. La selezione principale non è negli Appunti.
Grawity

47

Utilizzare CtrlShiftVper incollare.

Ctrl con altri caratteri viene solitamente utilizzato dalla shell per funzioni speciali.


4
Quindi perché Linux non registra invece CTRL + MAIUSC per funzioni speciali; Penso che il copia-incolla sia più tipico di alcuni utenti rispetto a quelle funzioni speciali, giusto?
Yasser Zamani

22
Le shell sono esistite molto prima che esistessero terminali grafici e GUI con funzionalità taglia e incolla, quindi il tuo argomento non è veramente valido. @YasserZamani
slhck

9
Ctrl + Maiusc + V viene eseguito dall'emulatore di terminale (supponendo che tu stia utilizzando il Terminale GNOME) e non da bashsolo. Se sei mai al di fuori di un ambiente GUI o se stai usando un altro emulatore di termine, probabilmente non funzionerà. Non pensare che questo comando sia portatile.
Rahmu,

@rahmu Oh, non ne avevo idea. Utilizzare solo installazioni Ubuntu di serie. C'è un comando universale?
Akash,

2
Probabilmente non ce n'è uno per accedere agli Appunti (solo Shift + Ins per la selezione principale). Persino gli appunti sono una cosa X11, non accessibile da tty. Tuttavia, Ctrl + Shift + V è supportato da Terminale GNOME, Terminale Xfce4, KDE Konsole; questo copre gli ambienti GUI più popolari.
gravità

20

Ecco le tue impostazioni di copia incolla generiche con terminali popolari:

gnome-terminal (il più popolare su Linux)
Copia : CtrlShiftC
Incolla : CtrlShiftV
Nota : Seleziona-per-copiare e middle-clickincollare funziona anche, ma usa un blocco per appunti alternativo.

PuTTY (terminale più popolare in Windows)
Copia : (selezionare con il mouse, senza alcuna interazione tastiera)
Incolla : Right-click (o in modo più affidabile: shiftRight-click)
Nota : Le applicazioni che richiedono l'input del mouse (come vime links) può rubare Right-click- shiftRight-clicksempre lavorare in qualsiasi applicazione.


Copia terminale OSX : AppleC
Incolla : AppleV
Nota: le app che assumono il controllo del mouse (come vime links) possono sovrascrivere il significato della selezione del testo, nel qual caso la copia non funzionerà come previsto. In questi casi, tenere premuto Controlmentre si trascina il mouse per selezionare. L'interazione del mouse con le app è disabilitata per impostazione predefinita nelle impostazioni del terminale, quindi la maggior parte delle persone non lo saprà nemmeno.


Non è cmd.exepiù popolare di PuTTY su Windows? :-)
Ben

@Ben Non come terminale SSH.
Tylerl,

1
No, cmd.exenon è un terminale SSH. Questo è molto vero.
Ben

3
@Ben: non è affatto un terminale - solo una shell. Il terminale predefinito in Windows è il componente "Windows Console" di csrss.
gravità

@Ben, ma il tasto destro del mouse per incollare funziona anche cmd.exe(ed è l'unico modo lì, se non si desidera aprire il menu> modifica> incolla) in modalità di modifica rapida . Non c'è scorciatoia nel prompt dei comandi pre-win10
phuclv,

17

È una tradizione profondamente radicata che la Ctrlchiave insieme a una lettera genera caratteri di controllo ASCII trovati sottraendo 64 dal valore ASCII della lettera maiuscola. Questo calcolo mappa Ctrl- Aa 1 e così via. Ad esempio Ctrl- Iis Taband Ctrl- Jis linefeed.

Non esiste una tradizione simile per Ctrl- Shift. Ctrl- Shift- Vnon dovrebbe produrre alcun carattere specifico.

Gli emulatori di terminali devono supportare la tradizione attraversando in modo trasparente la Ctrlconvenzione, facendola apparire come input di caratteri ai programmi gestiti attraverso quella finestra del terminale. I programmi basati su terminali associano i tasti di controllo ai comandi. Ad esempio, Bash usa Ctrl- Vcome comando che significa "prendi letteralmente il prossimo personaggio". Ciò consente di incorporare un carattere di controllo nella riga di comando. Se il terminale ruba i tasti di controllo per proprio uso, tali comandi diventano non disponibili. Quindi intercettare Ctrl- Vper una meta-funzione è fuori discussione (almeno in una configurazione predefinita).

Tuttavia, emulatori di terminale sono liberi di intercettare Ctrl- Shift- Vche non si dovrebbe generare un carattere. Ctrl- Shift- Vnon è uno standard; è una cosa del Terminale di Gnome (che potrebbe trovarsi in alcuni altri terminali).

Sui desktop Unix basati su X la convenzione è che non è necessario alcun comando per copiare. Basta selezionare il testo. E il pulsante centrale incolla quel testo altrove. Scoprirai che funziona allo stesso modo in Xterm, Gnome Terminal e Firefox.

Ctrl- Vè una convenzione di Microsoft Windows, che è un'imitazione di Apple- Vdal Macintosh.


3
Non è esattamente sottrazione - tradizionalmente Ctrl ha cancellato il sesto e il settimo bit del personaggio; per questo motivo, Ctrl + Maiusc + lettera funziona in modo identico a Ctrl + Lettera nella maggior parte dei terminali (a meno che non sia esplicitamente sostituito dal terminale, come nel caso delle scorciatoie copia / incolla).
Grawity

1
Poiché le chiavi sono essenzialmente ordinate casualmente rispetto allo standard ASCII, la ROM del programma include diverse tabelle di consultazione che aiutano a generare i codici ASCII. ... Tenere premuto il tasto CONTROL quando si preme un altro tasto provoca un'altra ricerca nella tabella. [Manuale tecnico serie VT100, 4.4.9.3, digitale].
Kaz,

1
@Linger grazie per la modifica. Rende bene, ma non c'è modo di digitare tutti questi <kbd>tag nei post futuri.
Kaz

Ctrl-Alo è 1. Come posso provarlo? Il mio terminale Gnome non fa nulla quando premo Ctrl-A.
robert,

3

Per me, il modo più semplice per copiare incolla nella shell è:

Seleziona il codice desiderato e incollalo facendo clic su mouse-middle-key


1
Finché hai un tasto centrale del mouse.
jpierson,

1
@jpierson non lo consiglio vivamente, ma puoi scrivere un piccolo script che semplicemente utilizza xdotool click 2per emulare il clic del terzo pulsante per te. Quindi, in qualsiasi gestore di finestre / ambiente desktop in cui ti trovi, puoi associare questo script a una chiave - diciamo mod i(per inserire) o qualsiasi associazione di tasti potresti avere disponibile (o qualunque cosa mod possa significare - che dipende davvero da dove lo associ)
dylnmc,

2

Possiamo usare il pulsante Inserisci tastiera per fare copia e incolla (nelle vecchie tastiere può mancare)

Copia : CtrlInsert
Incolla :CtrlShiftInsert


1

puoi anche usare il pulsante centrale e un mouse se ti senti pigro e selezionare un comando da un documento di testo, script o web o forum. una volta selezionato il comando desiderato, spostati sul terminale e fai clic sul pulsante centrale del mouse. Uso questo metodo come utilizzo linux cucciolo che sembra non supportare il normale comportamento del clic destro e incolla. lo fa in una finestra del gestore file, ma non in una finestra terminale. non so perché, ma sono abbastanza contento di aver scoperto il metodo del pulsante centrale, molto utile! ;-)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.