O que o Visual Studio quer dizer com normalizar finais de linha inconsistentes?

238

O Visual Studio ocasionalmente me diz:

As terminações de linha nos arquivos a seguir não são consistentes. Deseja normalizar as terminações de linha?

Em seguida, é apresentada uma lista suspensa com padrões diferentes ou algo assim, como Windows, Mac, Unix e alguns Unicode.

O que isso significa e o que acontecerá se eu clicar Yes?

MetaGuru
fonte
O Visual Studio me mostra essa mesma mensagem, mas o "arquivo" a que se refere é de fato uma pasta! O que isso significa?!
Coronel Panic
Criei um pequeno utilitário para fazer isso em um diretório inteiro ou recursivamente através de um conjunto de diretórios para todos os arquivos de uma extensão específica (como * .c ou * .h), embora eu use o Delphi, o utilitário funciona para qualquer código-fonte do Windows arquivos. Código fonte incluído mais binário (exe). Ele informará quais linhas têm feeds de linha extras (por exemplo, falta de retorno de carro) ou retornos de carro extras (por exemplo, falta de feed de linha). docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/…
Warren P
1
Pode ser causado por git. Veja também: stackoverflow.com/questions/170961/…
Jess
2
Eles devem ter uma opção no menu suspenso que diz 'favorecer o tipo de final de linha mais comum do resto do arquivo / projeto'.
MetaGuru 22/01

Respostas:

213

O que isso normalmente significa é que você tem linhas que terminam com algo diferente de um par de retorno de carro / avanço de linha. Isso geralmente acontece quando você copia e cola de uma página da web no editor de código.

Normalizar as terminações de linha é apenas garantir que todos os caracteres de final de linha sejam consistentes. Impede que uma linha termine em \r\ne outra termine com \rou \n; o primeiro é o par final de linha do Windows, enquanto os outros normalmente são usados ​​para arquivos Mac ou Linux.

Como você está desenvolvendo no Visual Studio, obviamente você desejará escolher "Windows" na lista suspensa. :-)

Ken White
fonte
1
como termina a linha sem retorno de carro ...?
MetaGuru 16/02/09
23
Então, por que o flip visual studio se importa com o fim das linhas, aparentemente reconhece todos os tipos diferentes, deveria ser feliz e calar a boca.
MetaGuru
53
Ah, mas e se você estiver usando o VS para corrigir algo que não é para o Windows? Correção rápida em um utilitário Linux ou algo que seja direto em C / C ++ e você não deseja adicionar CRLFs? Espere, agora você quer que a MS leia sua mente e saiba qual usar? <g> A equipe do VS está errada de qualquer maneira, não está? Sheesh!
21119 Ken White
6
Oh, engate Ken, você está certo, se eu estiver editando alguns arquivos que pretendo compilar no Linux e sei que o compilador engasgará e morrerá se não tiver exatamente as terminações de linha necessárias, então terei ficou feliz VS, deixe-me escolher ... OBRIGADO!
MetaGuru 23/09/10
19
O problema não é que o VS não possa lidar com as terminações de linha do Unix - ele pode. O aviso está informando que as terminações de linha são inconsistentes - ou seja, algumas linhas no arquivo são CRLF e outras são LF. O VS vai lidar com isso, mas outros aplicativos em sua cadeia de ferramentas podem não, por isso avisa. Se você não se importa com isso, desative o aviso: Opções -> Ambiente -> Documentos -> 'Verifique se há finais de linha consistentes ao carregar'. Esse aviso pode ser muito útil se você estiver trabalhando em produtos em várias plataformas.
the_mandrill
75

Algumas linhas terminam com \n.

Algumas outras linhas terminam com \r\n.

O Visual Studio sugere que você faça com que todas as linhas terminem da mesma forma.

Alex Reitbort
fonte
40

Se você estiver usando o Visual Studio 2012:

Vá para o menu ArquivoOpções avançadas de salvamento → selecione Tipo de final de linha como Windows (CR LF) .

pankaj
fonte
1
Essa opção não aparece no menu Arquivo do Visual Studio 2010 Ultimate versão 10.0.40219.1 SP1Rel.
DOK
1
@DOK, no menu Arquivo da versão Premium do Visual Studio 2010, ele faz !!
Peter Peter
4
Se você não conseguir ver a opção, poderá personalizar o menu do arquivo, vá em Ferramentas-> Personalizar, vá para a guia comandos e adicione um comando.
Rob
Existe uma configuração geral que afeta todos os arquivos juntos? É uma dor para fazer isso para todas as fontes em uma solução.
Klaus
12

Para ativar / desativar a opção, siga as etapas abaixo na barra de menus :

FerramentasOpçõesAmbienteDocumentosVerificar finais de linha consistentes ao carregar

CodificaçãoYoshi
fonte
7

O arquivo que você está editando foi editado com outro editor que não usa as mesmas terminações de linha, resultando em um arquivo com final de linha mista.

Os caracteres ASCII em uso para terminações de linha são:

CR, retorno de carro
LF, alimentação de linha

Windows = CRLF
Mac OS 9 ou anterior = CR
Unix = LF

monowerker
fonte
6

O artigo de nova linha da Wikipedia pode ajudá-lo. Aqui está um trecho:

As convenções de nova linha diferentes geralmente fazem com que arquivos de texto que foram transferidos entre sistemas de tipos diferentes sejam exibidos incorretamente. Por exemplo, arquivos originados em sistemas Unix ou Apple Macintosh podem aparecer como uma única linha longa em alguns programas em execução no Microsoft Windows. Por outro lado, ao visualizar um arquivo originário de um computador Windows em um sistema Unix, o CR extra pode ser exibido como ^ M ou no final de cada linha ou como uma segunda quebra de linha.

Richard Ev
fonte
5

Isso significa que, por exemplo, algumas de suas linhas de texto com a <Carriage Return><Linefeed>(padrão do Windows) e outras terminam com apenas a <Linefeed>(padrão do Unix).

Se você clicar em 'sim', o final das linhas no seu arquivo de origem será convertido para ter o mesmo formato.

Isso não fará nenhuma diferença para o compilador (porque o fim de linhas conta como mero espaço em branco), mas pode fazer alguma diferença para outras ferramentas (por exemplo, o 'diff' no seu sistema de controle de versão).

ChrisW
fonte
4

Não é apenas o Visual Studio ... Seria qualquer ferramenta que lesse os arquivos, compiladores, vinculadores etc. que precisaria ser capaz de lidar com isso.

Em geral (para desenvolvimento de software), aceitamos o problema de final de linha multiplataforma, mas deixamos o software de controle de versão lidar com isso.

Peter Y
fonte
1
Concordo. Melhor deixar seu sistema SCM fazer isso. Se você estiver usando svn, consulte também stackoverflow.com/questions/15687/…
kgriffs
Concordo plenamente. O que acontece se eu estiver trabalhando em um projeto e estiver no Windows e meu colega de equipe estiver usando o Mac. Mudaremos constantemente CR para CRLF e vice-versa. Melhor deixar o SCM abstrair isso. A maioria das respostas supõe que as pessoas estejam trabalhando sozinhas ou que todos que trabalham no código estejam usando o Windows.
Bydevev
3

Ao copiar e colar algo da Web, você pode obter as terminações de linha inconsistentes.
Para corrigir isso, você pode usar a extensão do Visual studio "Line Endings Unifier", que pode tornar a conclusão da linha consistente automaticamente ao salvar o arquivo.

insira a descrição da imagem aqui

Jay Shah
fonte
2

Há um suplemento para o Visual Studio 2008 que converte o formato de fim de linha quando um arquivo é salvo. Você pode baixá-lo aqui: http://grebulon.com/software/stripem.php


fonte
Isso pode ajudar quando você receber o erro "terminações inconsistentes de linha" no svn.
kgriffs