Que signifie Visual Studio en normalisant les fins de ligne incohérentes?

238

Visual Studio me dit parfois:

Les fins de ligne dans les fichiers suivants ne sont pas cohérentes. Voulez-vous normaliser les fins de ligne?

Cela me donne ensuite un menu déroulant avec différentes normes ou quelque chose, comme Windows, Mac, Unix et quelques Unicode.

Qu'est-ce que cela signifie et que se passera-t-il si je clique sur Yes?

MetaGuru
la source
Visual Studio me montre ce même message, mais le "fichier" auquel il se réfère est en fait un dossier! Qu'est-ce que ça veut dire?!
Colonel Panic
J'ai fait un petit utilitaire pour le faire dans un répertoire entier ou récursivement à travers un ensemble de répertoires pour tous les fichiers d'une extension particulière (comme * .c ou * .h), bien que j'utilise Delphi, l'utilitaire fonctionne pour n'importe quel code source Windows des dossiers. Code source inclus plus binaire (exe). Il indiquera quelles lignes ont des sauts de ligne supplémentaires (c'est-à-dire des retours chariot manquants) ou des retours chariot supplémentaires (c'est-à-dire des retours à la ligne manquants). docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/…
Warren P
1
Peut être causé par git. Voir aussi: stackoverflow.com/questions/170961/…
Jess
2
Ils devraient avoir une option dans le menu déroulant qui dit «privilégier le type de fin de ligne le plus courant du reste du fichier / projet».
MetaGuru

Réponses:

213

Cela signifie généralement que vous avez des lignes se terminant par autre chose qu'une paire retour chariot / saut de ligne. Cela se produit souvent lorsque vous copiez et collez à partir d'une page Web dans l'éditeur de code.

Normaliser les fins de ligne, c'est simplement s'assurer que tous les caractères de fin de ligne sont cohérents. Il empêche une ligne de se terminer par \r\nune autre se terminant par \rou \n; la première est la paire de fin de ligne Windows, tandis que les autres sont généralement utilisées pour les fichiers Mac ou Linux.

Puisque vous développez dans Visual Studio, vous voudrez évidemment choisir "Windows" dans le menu déroulant. :-)

Ken White
la source
1
comment se termine la ligne sans retour chariot ...?
MetaGuru
23
Alors pourquoi le flip fait que Visual Studio se soucie de la fin des lignes, il reconnaît apparemment tous les différents types, il devrait simplement être heureux et se taire.
MetaGuru
53
Ah, mais que se passe-t-il si vous utilisez simplement VS pour corriger quelque chose qui n'est pas pour Windows? Solution rapide sur un utilitaire Linux ou quelque chose de simple C / C ++, et vous ne voulez pas de CRLF ajoutés? Attendez maintenant, vous voulez que MS lise votre esprit et sache quoi utiliser? <g> L'équipe VS a tort de toute façon, n'est-ce pas? Sheesh!
Ken White
6
Oh snap Ken, tu as raison, si je suis en train d'éditer des fichiers que j'ai l'intention de compiler sous Linux et je sais que le compilateur s'étouffera et mourra s'il n'a pas exactement les fins de ligne dont il a besoin, alors j'aurai content VS me laisse choisir ... MERCI!
MetaGuru
19
Le problème n'est pas que VS ne peut pas faire face aux fins de ligne Unix - il le peut. L'avertissement vous indique que les fins de ligne sont incohérentes - c'est-à-dire que certaines lignes du fichier sont CRLF et d'autres LF. VS fera face à cela, mais d'autres applications de votre chaîne d'outils ne le feront peut-être pas, c'est pourquoi il vous avertit. Si vous ne vous souciez pas de cela, désactivez l'avertissement: Options -> Environnement -> Documents -> 'Vérifier la fin des lignes cohérentes lors du chargement'. Cet avertissement peut être très utile si vous travaillez sur des produits sur plusieurs plates-formes.
the_mandrill
75

Certaines lignes se terminent par \n.

Certaines autres lignes se terminent par \r\n.

Visual Studio vous suggère de faire en sorte que toutes les lignes se terminent de la même manière.

Alex Reitbort
la source
40

Si vous utilisez Visual Studio 2012:

Allez dans le menu FichierOptions d'enregistrement avancées → sélectionnez le type de fin de ligne sous Windows (CR LF) .

pankaj
la source
1
Cette option n'apparaît pas dans mon menu Fichier pour mon Visual Studio 2010 Ultimate Version 10.0.40219.1 SP1Rel.
DOK
1
@DOK, sur mon menu Fichier dans la version Premium de Visual Studio 2010 c'est le cas !!
Peter
4
Si vous ne voyez pas l'option, vous pouvez personnaliser votre menu de fichiers en allant dans Outils-> Personnaliser, en allant dans l'onglet commandes et en ajoutant une commande.
Rob
Existe-t-il un paramètre général qui affecte tous les fichiers ensemble? C'est pénible de le faire pour toutes les sources sous une solution.
Klaus
12

Pour activer / désactiver l'option, suivez les étapes ci-dessous dans la barre de menus :

OutilsOptionsEnvironnementDocumentsVérifier la fin des lignes cohérentes lors du chargement

CodageYoshi
la source
7

Le fichier que vous modifiez a été modifié avec un autre éditeur qui n'utilise pas les mêmes fins de ligne, résultant en un fichier avec des fins de ligne mixtes.

Les caractères ASCII utilisés pour les fins de ligne sont:

CR, retour chariot
LF, saut de ligne

Windows = CRLF
Mac OS 9 ou version antérieure = CR
Unix = LF

monowerker
la source
6

L' article de la nouvelle ligne de Wikipedia pourrait vous aider. En voici un extrait:

Les différentes conventions de nouvelle ligne provoquent souvent l'affichage incorrect de fichiers texte qui ont été transférés entre des systèmes de types différents. Par exemple, les fichiers provenant de systèmes Unix ou Apple Macintosh peuvent apparaître comme une seule longue ligne sur certains programmes exécutés sous Microsoft Windows. Inversement, lorsque vous affichez un fichier provenant d'un ordinateur Windows sur un système Unix, le CR supplémentaire peut être affiché sous la forme ^ M ou à la fin de chaque ligne ou comme un deuxième saut de ligne.

Richard Ev
la source
5

Cela signifie que, par exemple, certaines de vos lignes de texte avec un <Carriage Return><Linefeed>(la norme Windows), et certaines se terminent avec juste un <Linefeed>(la norme Unix).

Si vous cliquez sur «oui», la fin des lignes de votre fichier source sera convertie pour avoir le même format.

Cela ne fera aucune différence pour le compilateur (car les fins de lignes comptent comme de simples espaces blancs), mais cela pourrait faire une différence pour d'autres outils (par exemple, le «diff» sur votre système de contrôle de version).

ChrisW
la source
4

Ce n'est pas seulement Visual Studio ... Ce serait des outils qui liraient les fichiers, les compilateurs, les éditeurs de liens, etc.

En général (pour le développement de logiciels), nous acceptons le problème de fin de ligne multiplateforme, mais laissons le logiciel de contrôle de version s'en occuper.

Peter Y
la source
1
Je suis d'accord. Il vaut mieux laisser votre système SCM le faire. Si vous utilisez svn, voir aussi stackoverflow.com/questions/15687/…
kgriffs
Entièrement d'accord. Que se passe-t-il si je travaille sur un projet et que je suis sous Windows et que mon coéquipier utilise Mac. Nous changerons constamment CR en CRLF et vice-versa. Mieux vaut laisser le SCM résumer cela. La plupart des réponses supposent simplement que les gens travaillent seuls ou que tous ceux qui travaillent sur le code utilisent Windows.
bytedev
3

Lorsque vous copiez collez quelque chose à partir du Web, vous pouvez obtenir des fins de ligne incohérentes.
Pour résoudre ce problème, vous pouvez utiliser l'extension Visual Studio "Line Endings Unifier" qui peut rendre la fin de ligne cohérente automatiquement lors de l'enregistrement du fichier.

entrez la description de l'image ici

Jay Shah
la source
2

Il existe un complément pour Visual Studio 2008 qui convertit le format de fin de ligne lorsqu'un fichier est enregistré. Vous pouvez le télécharger ici: http://grebulon.com/software/stripem.php


la source
Cela peut être utile lorsque vous obtenez l'erreur «fin de ligne incohérente» de svn.
kgriffs