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

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

Quando Copio qualcosa negli appunti e premo Ctrl + V in Bash, non succede nulla; Tuttavia, cliccando con il tasto destro del mouse e selezionando Incolla il lavoro.

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

Risposte (7)

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

Ai tempi dei terminali fisici terminali , 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 varie diverse battute di tasti. Per esempio, la shell bash usa CtrlK o CtrlU per “uccidere” (tagliare), CtrlY per “strappare” (incollare); questo viene da l'editor emacs .

CtrlC quasi ovunque in Unix era il tasto “interrupt” , usato per cancellare il programma o l'operazione corrente. Il tasto CtrlV spesso significava “inserire alla lettera” - cioè inserire il seguente carattere letteralmente senza eseguire alcuna azione associata. Per esempio, un normale Esc passa in modalità comando nell'editor vi, ma CtrlV, Esc inserisce il carattere ESC nel documento.

L'uso di CtrlC per copiare e CtrlV per incollare dagli appunti di tutta la sessione è stato introdotto da Mac OS nel 1983 e da Microsoft Windows 3.x nel 1990. (Le versioni precedenti di Windows (1.x e 2.x), così come IBM OS/2, supportavano solo i tasti IBM CUA CtrlIns per copiare e ShiftIns per incollare; queste scorciatoie rimangono supportate da tutte le versioni di Windows)

Quando le GUI con supporto per gli appunti raggiunsero finalmente Unix, i tasti Ctrl erano già in uso da molti programmi di terminale. Inoltre, l'interfaccia grafica X aveva un po’ meccanismi diversi : “selezioni” e “buffer di taglio”. Anche ora è possibile selezionare il testo in un programma e inserirlo usando il tasto centrale del mouse, senza alcuna azione esplicita di copia.

In breve, al momento della scrittura di Xterm e GNOME Terminal (suppongo che si usi quest'ultimo), CtrlV ha già avuto un significato completamente diverso per molti anni e non poteva essere cambiato. Inoltre, un metodo alternativo di copia del testo - la “selezione” - era già presente in X11, quindi l'azione esplicita di copia/incolla era probabilmente considerata non così importante come lo sarebbe stata in Windows. Questo significa che dovevano essere selezionate diverse scorciatoie da tastiera - per esempio, la maggior parte dei programmi di terminale moderni, come GNOME Terminal, usano CtrlShiftC e CtrlShiftV. (Se si usa Xterm, le stesse scorciatoie possono essere aggiunte manualmente usando XTerm*vt100*translations Xresource. Rxvt non ha tale opzione.)

(La maggior parte dei toolkit X11 supporta anche i tasti CUA “copia” e “incolla”, che non sono in conflitto con i programmi del terminale. Sfortunatamente, le implementazioni sono piuttosto incoerenti - CtrlIns copia negli “appunti” nella maggior parte dei programmi (GTK, Qt4, ma ignorati da Xaw); tuttavia, ShiftIns incolla dalla “selezione primaria” nella maggior parte dei programmi GTK e Qt4, ma dagli “appunti” in Firefox, e dai cut-buffer ora-obsolete nell'ora-obsolete Xaw. )


Detto questo, alcuni terminali o console (in particolare, la console di Windows 10) do supportano questi tasti. Dato che la console di Windows ha sempre avuto una modalità separata “mark/select”, CtrlC ora ha anche due significati basati sul contesto - in modalità normale invia un interrupt, in modalità select copia negli appunti (proprio come faceva Enter).

Nel frattempo, gli strumenti a riga di comando di Windows non hanno mai usato CtrlV per nulla, quindi era legato a “incollare” senza disturbare molto nulla. Fare lo stesso su terminali simili a Unix sarebbe però più problematico.

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

Usare CtrlShiftV per l'incollaggio.

Ctrl con altri caratteri Ctrl è di solito usato dal guscio per funzioni speciali.

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

Ecco le vostre impostazioni generali di copia-incolla con i terminali più diffusi:

Terminale a dominio (più diffuso su Linux) Copia : CtrlShiftC Incolla : CtrlShiftV Nota : Anche Select-to-copy e middle-click per incollare funziona, ma utilizza una clipboard alternativa.

PuTTY (il terminale più popolare in Windows) Copy : (selezionare con il mouse, senza interazione con la tastiera) Incolla : Click destro (o più affidabile: shiftRight-click) Nota : Le applicazioni che richiedono l'input del mouse (come vim e links) possono rubare il tasto destro del mouse – shiftRight-click funzionerà sempre in qualsiasi applicazione.

** Terminale OSX** Copia : AppleC Incolla : AppleV Nota: Le app che prendono il controllo del mouse (come vim e links) possono sovrascrivere ciò che significa selezionare il testo, nel qual caso la copia non funzionerà come ci si aspetta. In questi casi, tenere premuto Control mentre si trascina il mouse per selezionare. L'interazione del mouse con le applicazioni è disabilitata di default nelle impostazioni del terminale, quindi la maggior parte delle persone non lo saprà nemmeno.

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

È una tradizione molto radicata che la chiave Ctrl insieme ad una lettera genera i caratteri di controllo ASCII che si trovano sottraendo 64 dal valore ASCII della lettera maiuscola. Questo calcolo mappa Ctrl-A a 1, e così via. Per esempio Ctrl-I è Tab e Ctrl-J è linefeed.

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

Gli emulatori di terminale devono supportare la tradizione passando in modo trasparente attraverso la convenzione Ctrl, facendola apparire come un'immissione di caratteri nei programmi che vengono gestiti attraverso quella finestra di terminale. I programmi basati sul terminale mappano i tasti di controllo dei comandi. Per esempio, Bash usa Ctrl-V come comando che significa “prendere il carattere successivo alla lettera”. Questo permette di incorporare un carattere di controllo nella riga di comando. Se il terminale ruba i tasti di controllo per il proprio uso, tali comandi non sono più disponibili. Quindi intercettare Ctrl-V per una meta-funzione è fuori questione (almeno in una configurazione predefinita).

Tuttavia, gli emulatori di terminale sono liberi di intercettare Ctrl-Shift-V che non ci si aspetta generino un carattere. Ctrl-Shift-V non è uno standard; è una cosa da terminale Gnomo (che può essere 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 il testo altrove. Troverete che funziona sia in Xterm, Gnome Terminal che in Firefox.

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

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

Per me, il modo più semplice per copiare l'incolla nella conchiglia è:

Selezionare il codice che si desidera e poi passarlo cliccando sul tasto centrale del mouse

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

Possiamo usare il pulsante della tastiera per copiare e incollare (nelle vecchie tastiere può mancare)

Copia : CtrlInsert Incolla : CtrlShiftInsert

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

Se vi sentite pigri, potete anche usare il tasto centrale del mouse e selezionare un comando da un documento di testo, da uno script o da un web o da un forum. una volta selezionato il comando desiderato, spostatevi semplicemente sul vostro terminale e cliccate sul tasto centrale del mouse. Io uso questo metodo come uso il cucciolo di linux che non sembra supportare il normale comportamento del tasto destro del mouse. lo fa in una finestra di gestione dei file, ma non in una finestra del terminale. non so perché, ma sono molto contento di aver scoperto il metodo del pulsante centrale, molto utile! ;-)