92

Почему ^M используется для представления возврата каретки в VIM и других контекстах?

Я предполагаю, что M - 13-я буква латинского алфавита, а возврат каретки - \x0D или десятичное 13 . Это причина? Документировано ли это представление где-нибудь?

Я заметил, что Tab представлен ^I , который является девятой буквой латинского алфавита. И наоборот, Tab равен \x09 или десятичному 9 , что поддерживает мою теорию, изложенную выше. Однако, где это может быть задокументировано как факт?

7 ответов7

115

Я считаю, что то, о чем на самом деле спрашивал ОП, называется каретной нотацией.

Нотация каретки - это нотация непечатных управляющих символов в кодировке ASCII. Обозначение состоит из каретки (^), за которой следует заглавная буква; этот орграф обозначает код ASCII, который имеет числовое значение, эквивалентное числовому значению буквы. Например, символ EOT со значением 4 представляется как ^ D, потому что D является 4-й буквой в алфавите. Символ NUL со значением 0 представляется как ^ @ (@ - это символ ASCII перед A). Символ DEL со значением 127 обычно представляется как ^?, потому что ASCII '?'перед' @ 'и -1 такой же, как 127, если маскируется до 7 бит. Альтернативная формулировка перевода заключается в том, что печатный символ находится путем обращения 7-го бита кода ASCII.

Полный список управляющих символов ASCII вместе с обозначением каретки можно найти здесь

Относительно vim и других текстовых редакторов: вы обычно увидите ^ M, только если откроете текстовый файл в формате Windows (CRLF) в редакторе, который ожидает окончания строки в Linux (LF). 0x0A отображается как разрыв строки, 0x0D перед тем, как печатается как ^ M. В большинстве случаев настройки редактора по умолчанию включают «автоматическое распознавание концов строк».

22

Именно в этом причина.

ASCII определяет символы 0-31 как непечатные управляющие коды. Вот выдержка из справочной страницы ascii(7) из случайной системы Linux (man ascii), вплоть до CR (13):

   Oct   Dec   Hex   Char                       
   ─────────────────────────────────────────────
   000   0     00    NUL '\0'                    
   001   1     01    SOH (start of heading)     
   002   2     02    STX (start of text)         
   003   3     03    ETX (end of text)           
   004   4     04    EOT (end of transmission)   
   005   5     05    ENQ (enquiry)               
   006   6     06    ACK (acknowledge)           
   007   7     07    BEL '\a' (bell)             
   010   8     08    BS  '\b' (backspace)       
   011   9     09    HT  '\t' (horizontal tab)  
   012   10    0A    LF  '\n' (new line)        
   013   11    0B    VT  '\v' (vertical tab)    
   014   12    0C    FF  '\f' (form feed)       
   015   13    0D    CR  '\r' (carriage ret)    

Обычно эти символы генерируются с помощью Control и буквы, относящейся к требуемому символу. По этой причине на телетайпах и ранних терминальных клавиатурах была написана надпись «BELL» над клавишей G.

Стандартным документом, который определил ASCII, является ASA X3.4-1963, который был опубликован Американской ассоциацией стандартов в 1963 году. Я не могу найти оригинальный документ на их веб-сайте, но этот фрагмент оригинального документа показывает таблицу символов, включая контрольные коды выше.

13

Обозначение восходит к самым ранним ASCII телетайпам (около 1963 г.). Была клавиша CTRL, которая переключала бит 0x40 так, что CTRL-M (возврат каретки) будет 0D вместо 4D, CTRL-G (звонок) будет 07 вместо 47, CTRL-L (подача формы) будет 0C вместо 4C.

Не было никакого "замысла" в назначении определенных букв определенным функциям, это был просто шанс, что, когда пыль устранилась от назначения кодов ASCII, клавиша M на один бит отличалась от возврата каретки, и, следовательно, возврат каретки стал CTRL-M.

Вот лучший снимок клавиатуры ASR33, который я могу найти. Как видите, имена управляющих символов печатаются маленькими буквами на соответствующих буквенных клавишах.

Телетайп Модель 33 ASR с перфоратором / считывателем бумажной ленты

Изображение Marcin Wichary, пользователь:AlanM1 (получено (обрезано) из файла:ASR-33 2.jpg) [ CC BY 2.0 ], через Wikimedia Commons

Ключ M не имеет обозначения, потому что есть выделенный ключ "RETURN", поэтому CTRL-M является избыточным.

2

Символ каретки (^) - это просто сокращение для записи, удерживая нажатой клавишу «Control» - CTRL.

В старые добрые времена вы могли вводить эти коды (см. Выше) напрямую, клавиша Ctrl + G (^ G) заставляла терминал "дин"

Когда вы хотите добавить CR в Vim, вы используете клавиши Ctrl + M и т.д. = Ctrl + I

2

Потребность в некотором визуальном способе отображения того, что по определению является непечатными символами.

Итак, кто-то в начале 1970-х (или, может быть, раньше) (я помню, что видел это на CP/M, а кто-то еще уже упоминал TOPS) решил, что "знак вставки плюс" будет символом для 26 непечатаемых управляющих символов ASCII со значениями С 1 по 26 Значение 0 является / было напечатано как ^ @, а значение 127 как ^?.

1

Где это задокументировано, на этой странице перечислены все управляющие символы с указанием того, как вводить / представлять их с помощью управляющего ключа (хотя первый, ascii-символ 0, не имеет представления управляющего ключа), и для символа 127 он не имеет ничего. И это обеспечивает источники в нижней части

https://www.cs.tut.fi/~jkorpela/chars/c0.html

Можно задаться вопросом, учитывая, что существует 33 управляющих символа (символы ASCII 0–31, 32 символа, + символ 127. итак, 33 символа). Как все они будут представлены, поскольку в алфавите всего 26 букв. Ну, он использует Ctrl-A для символа 1 Ascii, Ctrl-Z для символа 26 ascii, и там, как только он достигает Ctrl-Z, он использует [ \ ] ^ _

Он отображает Ctrl-Z как SUB, хотя в DOS и в командной строке cmd это EOF, и вы, как технический специалист, используете его, когда выполняете copy con a.a где a.a - ваш файл. Вы вводите текст и завершаете его нажатием Ctrl-Z, который, как ни странно, не вводит маркер EOF. Но говорит CMD, что это конец файла, поэтому CMD записывает его.

Это cs.tut.fi веб-страница дает это в качестве источника
http://www.wps.com/texts/codes/X3.4-1963/index.html

но это неработающая ссылка, но доступная на archive.org в виде JPG

Американский стандартный код для обмена информацией
Стандарт ASA X3.4-1963

https://web.archive.org/web/20010430085116/http://www.wps.com/texts/codes/X3.4-1963/index.html

0

Вы можете увидеть все , не pritable символов ASCII отображения управления в этой таблице.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .