Чому ^ C, ^ V тощо з'являються в терміналі, коли я використовую комбінацію клавіш Ctrl + символів?


26

Іноді, коли копіюємо вставлення тексту з виводу команд, я випадково використовую Ctrl+ cзамість Ctrl+ Shift+ c.

Тож командний рядок трактує це як ^C...

Чому це? Чому командний рядок інтерпретує controlвведення як ^?

Відповіді:


35

Він фактично не вставляє символьну послідовність "^ C". Це лише представлення для недрукованих символів управління ASCII, таких як:

  • ^C → ETX (Кінець тексту, надсилає сигнал вбивства), ASCII 0x03
  • ^D → EOT (Кінець передачі, завершує вхід), ASCII 0x04
  • ^H→ BS (Backspace, \b), ASCII 0x08
  • ^J→ LF (Line feed, \n), ASCII 0x0A
  • ^L → FF (Форма подачі, нова сторінка, очищає термінал), ASCII 0x0C
  • ^M→ CR (повернення каретки, \r), ASCII 0x0D

Це лише невеликий витяг можливих символів управління ASCII, який можна вставити за допомогою клавіатури; повний список ви можете знайти тут .

Я думаю, що найважливіші з них пам’ятати - Ctrl+ C, Ctrl+ Dі Ctrl+ L.


Використання карети ^як символу для "керування" датується ще до графічних часів, коли термінали були лише текстовими, і я вважаю, ще до того, коли у нас були картки та папір, терміналів немає. Мені б хотілося дізнатись, чому символом було обрано каре.
Падді Ландау

8

Оскільки комбо CTRL+ KEYінтерпретується терміналом як недруковані символи ASCII, і будучи тими, що не друкуються, потрібен спосіб їх представлення.

Конвенція, що випливає з терміналів VT з підтримкою ANSI , полягає у зображенні комбінації CTRL+, що KEYпредставляє CTRLз caret ( ^) та KEYз KEY.


5

Під час копіювання та вставки в термінал найкраще використовувати ярлики Ctrl+ Insertта Shift+ Insertвідповідно.

Це більш традиційні скорочення для використання терміналів, хоча ви зауважте, що в графічному середовищі X Ctrl+ Insertі Shift+ Insertприв’язані до того самого Ctrl+ Cі Ctrl+ V.

У більшості терміналів Ctrl+ C(представлені символом ^C) використовуються для зупинки виконання процесу, отже, вставлення з цим ярликом не працюватиме.

Для швидкого копіювання та вставлення ви можете використовувати основний буфер X, виділяючи текст, який ви хочете скопіювати, а потім клацніть середнім клавішею, куди потрібно вставити його. Клавіатура не потрібна.


2
Вибачте, але ви неправильно зрозуміли питання. OP хотів дізнатися, чому рядки ^Cабо подібні з’являються при натисканні CTRL + C (або CTRL + інша літера). Справа не в тому, як правильно скопіювати та вставити речі в термінал, на що ваша відповідь була б чудовою.
Байт-командир

@ByteCommander, правда ти! мої вибачення, я залишаю свою відповідь такою ж, як здається, на питання вже відповіли правильно :) Хтось може наткнутися на це і знайти те, що я написав корисним.
Кіфер Рурк

-2

Вам слід використовувати Ctrl+, Cа не Shift+ Ctrl+ C, оскільки в командному рядку вони роблять те саме (і Ctrl+ Cпростіше, ніж Shift+ Ctrl+ C). Це може бути неправдою в певних графічних середовищах, коли графічний інтерфейс фіксує деякі натискання клавіш і робить щось особливе, але якщо натискання клавіш справді відправляються в командний рядок, то різниці немає. Ось чому натискання кнопки Ctrl+ Cможе показувати ^ C як велику літеру, замість малій літери C. Командний рядок не відрізняє, за яким натисканням ви натискали (а великі регістри, мабуть, вважаються легшими для читання). Це стосується листів; для інших символів це Shiftможе мати ефект.)

Натискання Ctrl- Cнадсилає код ASCII, який знаходиться на 64 нижче позиції великої літери в таблиці ASCII (і на 96 менше, ніж позиції малої літери в таблиці ASCII). Тож натискання Ctrl- c(малі літери) надсилає код ASCII 3 (що на 64 менше, ніж капітальний Cкод ASCII 67). У багатьох середовищах ви можете утримувати Altта натискати 3на цифровій клавіатурі (а потім відпустити 3клавішу, а потім відпустити Altклавішу), і ви можете отримати той же ефект.

Щодо ^ C, ^ - це просто відома стенограма для Ctrlклавіші " ". Аналогічно, M- - це скорочення для Altклавіші " ". Помилка, так. M означає слово "Meta", яке можна ввести, утримуючи Altі натискаючи все, що йде далі, або іноді, натискаючи Esc(і відпускаючи Esc), а потім натискаючи все, що йде далі. Стаття Вікіпедії про "Контрольний ключ": розділ "Позначення" описує це як "Традиційне позначення". Це також відоме під назвою Caret Notation ( стаття Вікіпедії про позначення карет , Unix StackExchange: питання ryvnf про нотатку карет ).

Щодо останнього питання, командна оболонка не "інтерпретує" нічого, щоб бути каретою. Іншими словами, шкаралупа нічого не читає і вважає, що це карета. Що відбувається, це те, що оболонка використовує відомі позначення карет для виведення. Як інший приклад, ви можете бачити відомий пейджер "менше", використовуючи позначення карет, запустивши:dd if=/dev/zero bs=64 count=1 | less

(Текстовий редактор "nano" також використовує позначення карет у своїй онлайн-довідці, включаючи повні екрани онлайн-довідки, показані після натискання ^ G, ака Ctrl- g.)


4
DevRobot спеціально запитує про використання Ctrl-C (а точніше Shift-Ctrl-C) в контексті копіювання та вставки, що передбачає термінал GUI. Ви не обов'язково неправильні, але ваше пояснення безумовно бентежить для когось, хто приходить з точки зору користувача GUI.
RM
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.