Иногда при копировании и вставке текста с вывода команд я случайно использую Ctrl+ cвместо Ctrl+ Shift+ c.
Таким образом, командная строка интерпретирует это как ^C
...
Почему это? Почему командная строка интерпретирует controlввод как ^
?
Иногда при копировании и вставке текста с вывода команд я случайно использую Ctrl+ cвместо Ctrl+ Shift+ c.
Таким образом, командная строка интерпретирует это как ^C
...
Почему это? Почему командная строка интерпретирует controlввод как ^
?
Ответы:
На самом деле он не вставляет последовательность символов «^ 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.
Поскольку комбинации CTRL+ KEYинтерпретируются терминалом как непечатаемые символы ASCII, и, поскольку эти символы не предназначены для печати, вам необходим способ их представления.
Соглашение, вытекающее из терминалов VT с поддержкой ANSI , состоит в том, чтобы представлять CTRL+ KEYкомбинацию, представляющую CTRLс помощью caret ( ^
) и KEYwith KEY.
При копировании и вставке в / из терминала рекомендуется использовать сочетания клавиш Ctrl+ Insertи Shift+ Insertсоответственно.
Это более традиционные сокращения для терминального использования, хотя вы заметите, что в графической среде X Ctrl+ Insertи Shift+ Insertсвязаны с теми же Ctrl+ Cи Ctrl+ V.
В большинстве терминалов Ctrl+ C(представленный как ^C
) используется для остановки выполнения процесса, поэтому вставка с таким сокращением не будет работать.
Для быстрого копирования и вставки вы можете использовать основной буфер X, выделив любой текст, который вы хотите скопировать, а затем щелкнув по нему средней кнопкой мыши, куда вы хотите вставить его. Клавиатура не требуется.
^C
или подобные строки появляются при нажатии CTRL + C (или CTRL + другая буква). Речь идет не о том, как правильно копировать и вставлять вещи в терминале, для чего ваш ответ будет отличным.
Вы должны использовать 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.)
^
в качестве символа «управления» восходит к предграфическим временам, когда терминалы были только текстовыми, и я полагаю, что даже до этого, когда у нас были карточки и бумага, никаких терминалов не было. Я хотел бы знать, почему каретка была выбрана в качестве символа.