Perché ^ C, ^ V ecc. Appare nel terminale quando uso la scorciatoia da tastiera Ctrl + caratteri?


26

A volte, quando si copia e incolla il testo dall'output dei comandi, userò accidentalmente Ctrl+ cinvece di Ctrl+ Shift+ c.

Quindi la riga di comando lo interpreta come ^C...

Perchè è questo? Perché la riga di comando interpreta l' controlinput come ^?

Risposte:


35

In realtà non inserisce la sequenza di caratteri "^ C". Questa è solo una rappresentazione per caratteri di controllo ASCII non stampabili, come:

  • ^C → ETX (fine del testo, invia un segnale di interruzione), ASCII 0x03
  • ^D → EOT (fine della trasmissione, termina l'ingresso), ASCII 0x04
  • ^H→ BS (Backspace, \b), ASCII 0x08
  • ^J→ LF (avanzamento riga, \n), ASCII 0x0A
  • ^L → FF (avanzamento modulo, nuova pagina, cancella il terminale), ASCII 0x0C
  • ^M→ CR (ritorno a \rcapo , ), ASCII 0x0D

Questo è solo un piccolo estratto di possibili caratteri di controllo ASCII che possono essere inseriti usando la tastiera; puoi trovare un elenco completo qui .

Penso che i più importanti da ricordare siano Ctrl+ C, Ctrl+ De Ctrl+ L.


L'uso del cursore ^come simbolo di "controllo" risale ai tempi pre-grafici in cui i terminali erano solo di testo, e credo anche prima di allora quando avevamo carte e carta, nessun terminale. Mi piacerebbe sapere perché il cursore è stato scelto come simbolo.
Paddy Landau,

8

Poiché le combo CTRL+ KEYvengono interpretate dal terminale come caratteri ASCII non stampabili, ed essendo quelle non stampabili è necessario un modo per rappresentarle.

La convenzione, derivante dai terminali VT con supporto ANSI , è quella di rappresentare la combo CTRL+ che KEYrappresenta CTRLcon un cursore ( ^) e KEYcon KEY.


5

Quando si copia e incolla su / da un terminale, è consigliabile utilizzare le scorciatoie Ctrl+ Inserte Shift+ Insertrispettivamente.

Queste sono le scorciatoie più tradizionali per l'uso terminale, anche se noterai che in un ambiente grafico X Ctrl+ Inserte Shift+ Insertsono legati allo stesso Ctrl+ Ce Ctrl+ V.

Nella maggior parte dei terminali Ctrl+ C(rappresentato da ^C) vengono utilizzati per interrompere l'esecuzione di un processo, quindi incollare con quella scorciatoia non funzionerà.

Per copiare e incollare rapidamente, è possibile utilizzare il buffer principale di X evidenziando il testo che si desidera copiare e facendo clic con il tasto centrale nel punto in cui si desidera incollarlo. Nessuna tastiera richiesta.


2
Scusa, ma hai frainteso la domanda. OP voleva sapere perché la stringa ^Co simili appaiono quando si preme CTRL + C (o CTRL + un'altra lettera). Non si tratta di come copiare e incollare correttamente le cose nel terminale, per le quali la tua risposta sarebbe ottima.
Byte Commander

@ByteCommander, hai ragione! mi scuso, lascerò la mia risposta così com'è, poiché sembra che la domanda abbia già ricevuto una risposta adeguata :) Qualcuno potrebbe inciampare in questo e trovare ciò che ho scritto utile.
Keefer Rourke,

-2

Si dovrebbe essere utilizzando Ctrl+ Ce non Shift+ Ctrl+ C, perché sulla riga di comando, che fanno la stessa cosa (e Ctrl+ Cè più facile che Shift+ Ctrl+ C). Ciò potrebbe non essere vero in alcuni ambienti grafici in cui la GUI acquisisce alcuni tasti e fa qualcosa di speciale, ma se i tasti vengono veramente inviati alla riga di comando, allora non c'è alcuna differenza. Questo è il motivo per cui premendo Ctrl+ Cpuò mostrare ^ C come maiuscola C, anziché come una C minuscola. La riga di comando non fa alcuna distinzione su quale sia stato premuto (e presumibilmente si è ritenuto che la maiuscola fosse più facile da leggere). Questo è vero per le lettere; per altri personaggi, Shiftpotrebbe avere un effetto.)

Premendo Ctrl- Cinvia il codice ASCII che è 64 sotto la posizione della lettera maiuscola nella tabella ASCII (e 96 in meno della posizione della lettera minuscola nella tabella ASCII). Quindi premendo Ctrl- c(minuscolo) si invia il codice ASCII 3 (che è 64 in meno del Ccodice ASCII maiuscolo di 67). In molti ambienti, è possibile tenere premuto Alte quindi premere 3sul tastierino numerico (e quindi rilasciare il 3tasto, quindi rilasciare il Alttasto) e si potrebbe ottenere lo stesso effetto.

Per quanto riguarda ^ C, ^ è solo una scorciatoia ben nota per il Ctrltasto " ". Allo stesso modo, M- è una scorciatoia per il Alttasto " ". Ehm, si. M sta per la parola "Meta", che può essere inserita tenendo Altpremuto e premendo qualunque cosa venga dopo, o talvolta premendo Esc(e rilasciando Esc) e quindi premendo qualunque cosa viene dopo. L'articolo di Wikipedia su "Chiave di controllo": la sezione "Notazione" lo descrive come "Notazione tradizionale". Questo è anche noto come notazione Caret ( articolo di Wikipedia sulla notazione Caret , Unix StackExchange: la domanda di Ryvnf sulla notazione Caret ).

Per quanto riguarda l'ultima domanda, la shell dei comandi non "interpreta" nulla per essere un cursore. In altre parole, la shell non legge nulla e crede che si tratti di un cursore. Quello che sta succedendo è che la shell sta usando la notazione caret ben nota per l'output. Come altro esempio, puoi vedere il noto cercapersone, "less", usare la notazione con il cursore eseguendo:dd if=/dev/zero bs=64 count=1 | less

(L'editor di testo "nano" utilizza anche la notazione con il cursore nella sua guida in linea, inclusi gli schermi completi della guida in linea mostrati dopo aver premuto ^ G, aka Ctrl- g.)


4
DevRobot chiede specificamente di usare Ctrl-C (o piuttosto Shift-Ctrl-C) nel contesto di copia e incolla, il che implica un terminale GUI. Non sei necessariamente errato, ma la tua spiegazione è sicuramente fonte di confusione per qualcuno proveniente dal punto di vista dell'utente della GUI.
RM
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.