I think \n moves the needle down, and \r moves the needle to the beginning of a line (left align)? I'm not sure, though
Isso é verdade, mais ou menos, mas principalmente uma curiosidade histórica. Originalmente, o avanço de linha (LF) era usado para avançar o trabalho por uma linha em impressoras e terminais de impressão ( teleprinters ); retorno de carro (CR) retornou a cabeça de impressão para o início da linha.
Isso provavelmente ainda funciona em impressoras modernas quando usado em "modo de texto", mas é pouco relevante hoje em dia.
Anyway, I was told that Windows and Linux handle newlines and carriage returns differently.
A diferença é simplesmente: os projetistas de SO devem escolher como representar o início de uma nova linha no texto em arquivos de computador. Por várias razões históricas, no mundo Unix / Linux, um único caractere LF foi escolhido como marcador de nova linha; O MS-DOS escolheu CR + LF e o Windows herdou isso. Assim, diferentes plataformas usam diferentes convenções.
Na prática, isso está se tornando cada vez menos um problema. O marcador de nova linha é realmente relevante somente para programas que processam "texto simples", e não são muitos - ele afeta principalmente o código fonte do programa, arquivos de configuração e alguns arquivos de texto simples com documentação. Atualmente, a maioria dos programas que manipulam esses tipos de arquivos (editores, compiladores, etc.) podem manipular ambas as convenções de nova linha, portanto, não importa qual você escolher.
Existem alguns casos em que as ferramentas insistem na "nova" convenção de nova linha (por exemplo, os shell scripts do Unix não devem usar CR + LF), caso em que você deve usar o caminho certo.