¿Qué quiere decir Visual Studio con normalizar terminaciones de línea inconsistentes?

238

Visual Studio ocasionalmente me dice:

Los finales de línea en los siguientes archivos no son consistentes. ¿Quieres normalizar los finales de línea?

Luego me da un menú desplegable con diferentes estándares o algo, como Windows, Mac, Unix y un par de Unicode.

¿Qué significa esto y qué sucederá si hago clic Yes?

MetaGuru
fuente
¡Visual Studio me muestra este mismo mensaje, pero el "archivo" al que hace referencia es de hecho una carpeta! ¡¿Qué significa eso?!
Coronel Panic el
Hice una pequeña utilidad para hacer esto en un directorio completo o recursivamente a través de un conjunto de directorios para todos los archivos de una extensión particular (como * .c o * .h), aunque uso Delphi, la utilidad funciona para cualquier código fuente de Windows archivos. Código fuente incluido más binario (exe). Informará qué líneas tienen saltos de línea adicionales (es decir, faltan retornos de carro) o retornos de carro adicionales (es decir, faltan saltos de línea). docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/…
Warren P
1
Puede ser causado por git. Ver también: stackoverflow.com/questions/170961/…
Jess
2
Deberían tener una opción en el menú desplegable que diga 'favorecer el tipo de final de línea más común del resto del archivo / proyecto'.
MetaGuru

Respuestas:

213

Lo que generalmente significa es que tiene líneas que terminan con algo diferente a un par de retorno de carro / salto de línea. A menudo sucede cuando copia y pega desde una página web en el editor de código.

Normalizar los finales de línea es solo asegurarse de que todos los caracteres de finalización de línea sean consistentes. Impide que una línea termine en \r\ny otra que termine con \ro \n; el primero es el par final de línea de Windows, mientras que los otros se usan típicamente para archivos Mac o Linux.

Como está desarrollando en Visual Studio, obviamente querrá elegir "Windows" en el menú desplegable. :-)

Ken White
fuente
1
¿Cómo termina la línea sin un retorno de carro ...?
MetaGuru
23
Entonces, ¿por qué el flip le importa a Visual Studio cómo terminan las líneas, aparentemente reconoce todos los diferentes tipos, debería ser feliz y callado.
MetaGuru
53
Ah, pero ¿qué pasa si solo estás usando VS para arreglar algo que no es para Windows? Solución rápida en una utilidad de Linux o algo que es directo C / C ++, y no desea agregar CRLF? Espera, ¿quieres que MS lea tu mente y sepa cuál usar? <g> El equipo VS está equivocado de cualquier manera, ¿no es así? Sheesh!
Ken White
66
Oh, Ken, tienes razón, si estoy editando algunos archivos que planeo compilar en Linux y sé que el compilador se ahogará y morirá si no tiene exactamente los finales de línea que necesita, entonces tendré Me alegré VS déjame elegir ... ¡GRACIAS!
MetaGuru
19
El problema no es que VS no pueda hacer frente a las terminaciones de línea de Unix, sí puede. La advertencia le indica que las terminaciones de línea son inconsistentes , es decir, algunas líneas en el archivo son CRLF y otras son LF. VS se encargará de eso, pero otras aplicaciones en su cadena de herramientas pueden no hacerlo, por lo tanto, le advierte. Si no le importa esto, desactive la advertencia: Opciones -> Medio ambiente -> Documentos -> 'Verificar terminaciones de línea consistentes en la carga'. Esta advertencia puede ser muy útil si está trabajando en productos en múltiples plataformas.
the_mandrill
75

Algunas líneas terminan con \n.

Algunas otras líneas terminan con \r\n.

Visual Studio sugiere que todas las líneas terminen de la misma manera.

Alex Reitbort
fuente
40

Si está utilizando Visual Studio 2012:

Vaya al menú ArchivoOpciones avanzadas de guardado → seleccione Tipo de terminación de línea como Windows (CR LF) .

pankaj
fuente
1
Esa opción no aparece en mi menú Archivo para mi Visual Studio 2010 Ultimate Version 10.0.40219.1 SP1Rel.
DOK
1
@DOK, en mi menú Archivo en la versión Visual Studio 2010 Premium lo hace !!
Peter
44
Si no puede ver la opción, puede personalizar su menú de archivos yendo a Herramientas-> Personalizar, yendo a la pestaña de comandos y agregando un comando.
Rob
¿Existe una configuración general que afecta a todos los archivos juntos? Es un dolor hacer esto para todas las fuentes bajo una solución.
Klaus
12

Para activar / desactivar la opción, siga los pasos a continuación desde la barra de menú :

HerramientasOpcionesEntornoDocumentosVerificar terminaciones de línea consistentes en carga

CodificaciónYoshi
fuente
7

El archivo que está editando se ha editado con otro editor que no utiliza las mismas terminaciones de línea, lo que da como resultado un archivo con terminaciones de línea mixtas.

Los caracteres ASCII en uso para las terminaciones de línea son:

CR, retorno de carro
LF, avance de línea

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

monowerker
fuente
6

El artículo de la nueva línea de Wikipedia podría ayudarte. Aquí hay un extracto:

Las diferentes convenciones de nueva línea a menudo hacen que los archivos de texto que se han transferido entre sistemas de diferentes tipos se muestren incorrectamente. Por ejemplo, los archivos que se originan en los sistemas Unix o Apple Macintosh pueden aparecer como una sola línea larga en algunos programas que se ejecutan en Microsoft Windows. Por el contrario, cuando se visualiza un archivo que se origina en una computadora con Windows en un sistema Unix, el CR adicional se puede mostrar como ^ M o al final de cada línea o como un segundo salto de línea.

Richard Ev
fuente
5

Significa que, por ejemplo, algunas de sus líneas de texto con un <Carriage Return><Linefeed>(el estándar de Windows), y algunas terminan con solo un <Linefeed>(el estándar de Unix).

Si hace clic en "sí", el final de las líneas en su archivo fuente se convertirá para tener el mismo formato.

Esto no hará ninguna diferencia en el compilador (porque el final de las líneas cuenta como un simple espacio en blanco), pero puede hacer alguna diferencia en otras herramientas (por ejemplo, el 'diff' en su sistema de control de versiones).

ChrisW
fuente
4

No es solo Visual Studio ... Sería cualquier herramienta que lea los archivos, compiladores, enlazadores, etc., lo que debería ser capaz de manejarlo.

En general (para el desarrollo de software) aceptamos el problema de finalización de línea multiplataforma, pero dejamos que el software de control de versiones se ocupe de él.

Peter Y
fuente
1
Estoy de acuerdo. Lo mejor es dejar que su sistema SCM lo haga. Si está utilizando svn, consulte también stackoverflow.com/questions/15687/…
kgriffs el
Totalmente de acuerdo. ¿Qué sucede si estoy trabajando en un proyecto y estoy en Windows y mi compañero de equipo está usando Mac? Cambiaremos constantemente de CR a CRLF y viceversa. Lo mejor es dejar que el SCM abstraiga eso. La mayoría de las respuestas solo asumen que las personas están trabajando solas o que todas las personas que trabajan en el código están usando Windows.
bytedev
3

Cuando copie y pegue algo de la web, puede obtener los finales de línea inconsistentes.
Para solucionar esto, puede usar la extensión de Visual Studio "Line Endings Unifier" que puede hacer que el final de línea sea consistente automáticamente mientras se guarda el archivo.

ingrese la descripción de la imagen aquí

Jay Shah
fuente
2

Hay un complemento para Visual Studio 2008 que convierte el formato de fin de línea cuando se guarda un archivo. Puede descargarlo aquí: http://grebulon.com/software/stripem.php


fuente
Esto puede ayudar cuando obtiene el error "terminaciones de línea inconsistentes" de svn.
kgriffs