Por que é ^M
usado para representar um retorno de carro no VIM e em outros contextos?
Meu palpite é que M
é a 13ª letra do alfabeto latino e um retorno de carro é \x0D
ou decimal 13
. É este o motivo? Essa representação está documentada em algum lugar?
Percebo que Tab é representado por ^I
, que é a nona letra do alfabeto latino. Por outro lado, Tab é \x09
ou decimal 9
, o que apóia minha teoria acima. No entanto, onde isso pode ser documentado como fato?
terminal
encoding
special-characters
dotancohen
fonte
fonte
^H
um caractere é excluído ou permite a impressão sobreposta (n^H~
como uma maneira obsoleta de produzir ñ) ou qualquer outro uso real do caractere de controle é separado da notação de sinal de intercalação.Respostas:
Acredito que o que o OP estava realmente perguntando é chamado Caret Notation .
A lista completa de caracteres de controle ASCII, juntamente com a notação de sinal de intercalação, pode ser encontrada aqui
Em relação ao vim e outros editores de texto: Você normalmente verá apenas ^ M se abrir um arquivo de texto no formato Windows (CRLF) em um editor que espera finais de linha do Linux (LF). O 0x0A é renderizado como uma quebra de linha, o 0x0D antes de ser impresso como ^ M. Na maioria das vezes, as configurações padrão do editor incluem 'reconhecer automaticamente as terminações de linha'.
fonte
^A
é0x41 xor 0x40
, ou0x01
e^?
é0x3F xor 0x40
, ou0x7F
.<---
chave (também, confusamente, chamado backspace) em terminais do tipo VT100.Essa é exatamente a razão.
ASCII define os caracteres de 0 a 31 como códigos de controle que não imprimem. Aqui está um extrato da
ascii(7)
página do manual de um sistema Linux aleatório (man ascii
), incluindo CR (13):Convencionalmente, esses caracteres são gerados com Controle a letra relacionada ao caractere necessário. Teletipos e teclados iniciais de terminais tinham 'BELL' escrito acima da Gtecla por esse motivo.
O documento de normas que definiu ASCII é o ASA X3.4-1963 , publicado pela American Standards Association em 1963. Não consigo encontrar o documento original em seu site, mas esse extrato do documento original mostra a tabela de caracteres, incluindo os códigos de controle acima.
fonte
^M
é uma abreviação de Control-M. No terminal, você pressionaria a tecla Control juntamente com a tecla M para enviar o código ASCII 0x0D também conhecido como retorno de carro.A notação remonta aos primeiros teletipos ASCII (ca 1963). Havia uma tecla CTRL que alternava o bit 0x40 para que CTRL-M (retorno de carro) fosse 0D em vez de 4D, CTRL-G (campainha) seria 07 em vez de 47, CTRL-L (alimentação de formulário) seria 0C. de 4C.
Não havia "design" ao atribuir letras particulares a funções específicas, era apenas uma chance de que, quando a poeira baixasse ao atribuir códigos ASCII, a tecla M fosse um pouco diferente do retorno de carro e, portanto, o retorno de carro se tornasse CTRL-M.
Aqui está a melhor foto que posso encontrar de um teclado ASR33. Como você pode ver, os nomes dos caracteres de controle são impressos em letras minúsculas nas teclas alfa correspondentes.
Imagem de Marcin Wichary, Usuário: AlanM1 (derivado (cortado) de Arquivo: ASR-33 2.jpg ) [ CC BY 2.0 ], via Wikimedia Commons
A tecla M não possui uma notação porque existe uma tecla "RETURN" dedicada, portanto, CTRL-M é redundante.
fonte
O sinal de intercalação (^) é apenas uma abreviação para escrever, mantenha pressionada a tecla Control - CTRL pressionada.
Nos bons e velhos tempos, você poderia digitar esses códigos (veja acima) diretamente, a tecla Ctrl + G (^ G) faria o terminal "ding"
Quando você deseja adicionar um CR no Vim, use a tecla Ctrl + M etc tab = Ctrl + I
fonte
A necessidade de alguma maneira visual de exibir o que são, por definição, caracteres não imprimíveis.
Portanto, alguém no início dos anos 70 (ou talvez mais cedo) (lembro de vê-lo no CP / M, e alguém já mencionou o TOPS) decidiu que "caret plus letter" seria o símbolo dos 26 caracteres de controle ASCII não imprimíveis com valores 1 a 26. O valor 0 é / foi impresso como ^ @ e o valor 127 como ^ ?.
fonte
Onde está documentado, bem, esta página lista todos os caracteres de controle, com como inseri-los / representá-los com a chave de controle (embora o primeiro, caractere ascii 0, não tenha representação de chave de controle) e não possui nada para o caractere 127. E fornece fontes na parte inferior
https://www.cs.tut.fi/~jkorpela/chars/c0.html
Pode-se perguntar, considerando que existem 33 caracteres de controle (caracteres ASCII de 0 a 31, 32 caracteres, + caractere 127. portanto, = 33 caracteres) Como eles seriam representados, pois existem apenas 26 letras no alfabeto. Bem, ele usa Ctrl-A para o caractere Ascii 1, Ctrl-Z para o caractere Ascii 26 e, quando chega ao Ctrl-Z, usa
[
\
]
^
_
Ele lista Ctrl-Z como SUB, embora no DOS e no prompt do cmd seja EOF, e como usuário técnico, você o usa quando faz
copy con a.a
ondea.a
está o seu arquivo. Você digita o texto e o finaliza com Ctrl-Z, que engraçado o bastante não insere um marcador EOF. Mas diz ao CMD que é o fim do arquivo para que o CMD o grave.Essa página da web cs.tut.fi fornece isso como fonte
http://www.wps.com/texts/codes/X3.4-1963/index.html
mas é um link quebrado, mas disponível em archive.org, é na forma de JPGs
Código Padrão Americano para Intercâmbio de Informações
ASA standard X3.4-1963
https://web.archive.org/web/20010430085116/http://www.wps.com/texts/codes/X3.4-1963/index.html
fonte
^I
uma guia no bash: type padrãols ~/^I^I
e deverá ver todas as pastas no diretório inicial.Você pode ver todos os não pritable caracteres ASCII Controlmapeamento no este mesa.
fonte