Dlaczego ^ C, ^ V itp. Pojawiają się w terminalu, gdy używam skrótu klawiaturowego Ctrl + znak?


26

Czasami, gdy kopiuję wklejanie tekstu z wyników poleceń, przypadkowo użyję Ctrl+ czamiast Ctrl+ Shift+ c.

Więc wiersz poleceń interpretuje to jako ^C...

Dlaczego to? Dlaczego wiersz poleceń interpretuje controldane wejściowe jako ^?

Odpowiedzi:


35

W rzeczywistości nie wstawia sekwencji znaków „^ C”. Jest to tylko reprezentacja dla niedrukowalnych znaków kontrolnych ASCII, takich jak:

  • ^C → ETX (Koniec tekstu, wysyła sygnał zabicia), ASCII 0x03
  • ^D → EOT (Koniec transmisji, kończy wprowadzanie), ASCII 0x04
  • ^H→ BS (Backspace, \b), ASCII 0x08
  • ^J→ LF (wysuw wiersza, \n), ASCII 0x0A
  • ^L → FF (wysuw strony, nowa strona, czyści terminal), ASCII 0x0C
  • ^M→ CR (powrót karetki, \r), ASCII 0x0D

To tylko niewielki fragment możliwych znaków kontrolnych ASCII, które można wstawić za pomocą klawiatury; pełną listę można znaleźć tutaj .

Myślę, że najważniejsze do zapamiętania to Ctrl+ C, Ctrl+ Di Ctrl+ L.


Użycie daszka ^jako symbolu „kontroli” sięga czasów pre-graficznych, kiedy terminale były tylko tekstem, i uważam, że jeszcze przedtem, kiedy mieliśmy karty i papier, żadnych terminali. Chciałbym wiedzieć, dlaczego ten symbol został wybrany jako symbol.
Paddy Landau,

8

Ponieważ kombinacje CTRL+ KEYsą interpretowane przez terminal jako niedrukowalne znaki ASCII, a ponieważ są to niedrukowalne, potrzebujesz sposobu na ich reprezentację.

Konwencja, wywodząca się z terminali VT ze wsparciem ANSI , ma reprezentować kombinację CTRL+ KEYreprezentującą CTRLdaszek ( ^) i za KEYpomocą KEY.


5

Podczas kopiowania i wklejania do / z terminala, najlepszą praktyką jest używanie odpowiednio skrótów Ctrl+ Inserti Shift+ Insert.

Są to bardziej tradycyjne skróty do użytku z terminalami, choć zauważysz, że w środowisku graficznym X Ctrl+ Inserti Shift+ Insertsą powiązane z tymi samymi Ctrl+ Ci Ctrl+ V.

W większości terminali Ctrl+ C(reprezentowane przez ^C) są używane do zatrzymania wykonywania procesu, dlatego wklejanie przy użyciu tego skrótu nie będzie działać.

Do szybkiego kopiowania i wklejania możesz użyć głównego bufora X, zaznaczając dowolny tekst, który chcesz skopiować, a następnie klikając środkowym przyciskiem myszy w miejscu, w którym chcesz go wkleić. Nie wymaga klawiatury.


2
Przepraszam, ale źle zrozumiałeś pytanie. OP chciał wiedzieć, dlaczego ciąg ^Club podobne pojawiają się po naciśnięciu CTRL + C (lub CTRL + inna litera). Nie chodzi o to, jak poprawnie skopiować i wkleić rzeczy w terminalu, na które odpowiedź byłaby świetna.
Bajt Dowódca

@ByteCommander, masz rację! przepraszam, zostawię swoją odpowiedź tak, jak jest, ponieważ wydaje się, że na pytanie już udzielono prawidłowej odpowiedzi :) Ktoś może się na to natknąć i znaleźć to, co napisałem.
Keefer Rourke,

-2

Państwo powinno być za pomocą Ctrl+ Ci nie Shift+ Ctrl+ C, ponieważ w wierszu poleceń, robią to samo (a Ctrl+ Cjest łatwiejsze niż Shift+ Ctrl+ C). Może to nie być prawdą w niektórych środowiskach graficznych, w których GUI przechwytuje niektóre naciśnięcia klawiszy i robi coś specjalnego, ale jeśli naciśnięcia klawiszy są naprawdę wysyłane do wiersza poleceń, nie ma różnicy. Dlatego naciśnięcie Ctrl+ Cmoże pokazywać ^ C jako wielką literę C, zamiast małej litery C. W linii poleceń nie ma rozróżnienia na którą nacisnąłeś (a duże litery były prawdopodobnie oceniane jako łatwiejsze do odczytania). Dotyczy to liter; w przypadku innych postaci Shiftmoże to mieć wpływ).

Naciśnięcie Ctrl- Cwysyła kod ASCII, który jest 64 poniżej pozycji wielkiej litery w tabeli ASCII (i 96 mniej niż pozycja małej litery w tabeli ASCII). Tak więc naciśnięcie Ctrl- c(małe litery) wysyła kod ASCII 3 (czyli o 64 mniej niż kapitałowy Ckod ASCII 67). W wielu środowiskach możesz przytrzymać, Alta następnie nacisnąć klawisze 3numeryczny (a następnie zwolnić 3klawisz, a następnie zwolnić Altklawisz), aby uzyskać ten sam efekt.

Jeśli chodzi o ^ C, ^ jest dobrze znanym skrótem dla Ctrlklawisza „ ”. Podobnie, M- jest skrótem dla Altklawisza „ ”. Err, tak. M oznacza słowo „Meta”, które można wprowadzić, przytrzymując Alti naciskając to, co nastąpi później, lub czasami naciskając Esc(i zwalniając Esc), a następnie naciskając to, co nastąpi później. Artykuł Wikipedii na temat „Klucz kontrolny”: sekcja „Notacja” opisuje to jako „Tradycyjną notację”. Jest to również znane jako notacja Caret ( artykuł Wikipedii na temat notacji Caret , Unix StackExchange: pytanie ryvnf dotyczące notacji Caret ).

Jeśli chodzi o ostatnie pytanie, powłoka poleceń nie „interpretuje” niczego, by być daszkiem. Innymi słowy, powłoka niczego nie czyta i wierzy, że jest to daszek. To, co się dzieje, polega na tym, że powłoka korzysta z dobrze znanej notacji daszkowej dla danych wyjściowych. Jako kolejny przykład możesz zobaczyć dobrze znany pager „mniej”, użyj notacji karetki, uruchamiając:dd if=/dev/zero bs=64 count=1 | less

(Edytor tekstu „nano” używa również notacji karetki w pomocy online, w tym na pełnych ekranach pomocy online wyświetlanej po naciśnięciu ^ G, aka Ctrl- g.)


4
DevRobot konkretnie pyta o użycie Ctrl-C (a raczej Shift-Ctrl-C) w kontekście kopiowania i wklejania, co sugeruje terminal GUI. Niekoniecznie jesteś niepoprawny, ale twoje wyjaśnienie jest zdecydowanie mylące dla kogoś pochodzącego z perspektywy użytkownika GUI.
RM
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.