Почему ^ 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 (перевод строки, \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 ( ^) и KEYwith 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 + другая буква). Речь идет не о том, как правильно копировать и вставлять вещи в терминале, для чего ваш ответ будет отличным.
Byte Commander

@ByteCommander, ты прав! мои извинения, я оставлю свой ответ как есть, так как кажется, что на вопрос уже был дан правильный ответ :) Кто-то может наткнуться на это и найти то, что я написал полезным.
Кифер Рурк

-2

Вы должны использовать Ctrl+, Cа не Shift+ Ctrl+ C, потому что в командной строке они делают то же самое (и Ctrl+ Cпроще, чем Shift+ Ctrl+ C). Это может быть неверно в определенных графических средах, где графический интерфейс фиксирует некоторые нажатия клавиш и делает что-то особенное, но если нажатия клавиш действительно отправляются в командную строку, то нет никакой разницы. Вот почему нажатие Ctrl+ Cможет показывать ^ 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клавиши " ". Оу, да. М означает слово «Мета», которое можно ввести, удерживая Altи нажимая все, что будет дальше, или иногда нажимая Esc(и отпуская Esc), а затем нажимая все, что будет дальше. Статья Википедии о «Управляющем ключе»: раздел «Обозначения» описывает это как «Традиционное обозначение». Это также известно как нотация каретки ( статья Википедии о нотации карета , Unix StackExchange: вопрос ryvnf о нотации каретки ).

Что касается последнего вопроса, командная оболочка не «интерпретирует» что-либо как каретку. Другими словами, оболочка ничего не читает, и считает, что это карета. Происходит то, что оболочка использует хорошо известную запись каретки для вывода. В качестве другого примера вы можете увидеть хорошо известный пейджер "less", используйте символ каретки, выполнив:dd if=/dev/zero bs=64 count=1 | less

(Текстовый редактор «nano» также использует обозначение каретки в своей онлайн-справке, включая полные экраны интерактивной справки, отображаемые после нажатия ^ G, иначе Ctrl- g.)


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