A origem da assimetria remonta à história da computação.
Versão curta:
<CR> & <LF> (Carriage-Return and Linefeed)
==
\r & \n
Versão longa:
as primeiras telas eram basicamente versões digitais de teletipos (TTY) e usavam códigos de controle para gerar um comportamento semelhante às impressoras. O retorno de carro levou o cursor (ou cabeça de impressão) para a coluna inicial. O avanço de linha avançou para a próxima linha (em uma tela) e alimentou o papel uma linha adiante.
Para impressoras, você precisava fazer um emparelhamento <CR><LF>
ou sua saída não pareceria correta. Nas telas iniciais, o problema ainda era verdadeiro.
O DOS (e depois o Windows) seguiu o padrão antigo e salva o texto com <CRLF>
.
* O texto NIX (como a maioria dos usuários do vi é familiar) usa apenas <LF>
para obter eficiência.
Para testar no Windows, use o Word / Wordpad e salve algumas linhas de texto "como tipo: Texto - formato MS-DOS". Em seguida, abra o mesmo arquivo no bloco de notas. Deve parecer normal. Salve o mesmo arquivo no Word / Wordpad "como tipo: Texto". O bloco de notas ignorará todas as novas linhas e executará as linhas juntas. [O formato de texto do bloco de notas é padronizado para a \r\n
combinação, enquanto o Word / Wordpad é o padrão \n
.]
\ r é o código equivalente a <CR>
\ n é o código equivalente a <LF>
E na minha experiência (muito limitada) com o vi, ele tentaria "consertar" a <CRLF>
combinação do meu editor de texto do DOS. vi acabou removendo um caractere, substituindo por <NUL>
. Grande parte do motivo pelo qual parei de usar o vi.
\r
é<CR>
e\n
é<LF>
. Não aborda a questão real de por que\n\r
se comportar de maneira diferente em contextos diferentes.