web-dev-qa-db-fra.com

Comment corriger les fins de ligne incohérentes pour une solution complète?

Visual Studio détectera les fins de ligne incohérentes lors de l'ouverture d'un fichier et une option vous permettra de le corriger pour ce fichier spécifique. Toutefois, si je souhaite corriger les fins de ligne pour tous les fichiers d'une solution, comment procéder?

41
Borek Bernard

Juste pour une réponse plus complète, cela a fonctionné mieux pour moi:

Remplacer 

(?<!\r)\n

avec

\r\n

dans la solution entière avec l'option "regEx". 

Cela définira la bonne ligne se terminant dans tous les fichiers sans la bonne ligne se terminant jusqu'à présent. Il utilise l’anticipation négative pour vérifier la non-existence de a\r devant le\n.

Faites attention avec les autres solutions: elles modifieront toutes les lignes de tous les fichiers (en ignorant la fin de la ligne d'origine) ou supprimeront le dernier caractère de chaque ligne. 

21
Unchained

Vous pouvez utiliser la commande Remplacer dans les fichiers et activer les expressions régulières. Par exemple, pour remplacer les fins de lignes comportant un seul saut de ligne "\ n" (comme, par exemple, dans GitHub), par le saut de ligne Windows standard "\ r\n", recherchez:

([^\r]|^)\n

Cela dit de créer un groupe (c'est pourquoi les parenthèses sont obligatoires), où le premier caractère n'est pas un retour chariot ou le début d'une ligne. Le début du test de ligne ne concerne en réalité que le tout début du fichier, s'il commence par un "\ n". Suivre le groupe est une nouvelle ligne. Donc, vous ferez correspondre ";\n" qui a la mauvaise fin de ligne, mais pas "\ r\n" qui est la bonne fin de ligne.

Et remplacez-le par:

$1\r\n

Ceci dit de garder le groupe ($ 1) puis de remplacer le "\ n" par "\ r\n".

9
Ron

Essayer de faire

Edit > Advanced > Format Document

Enregistrez ensuite le document, tant que le fichier n'est pas modifié par un autre éditeur externe, il doit rester cohérent. Le répare pour moi. 

7
Flickayy

Mise à jour: s'il vous plaît soyez prudent. Ne le faites que si vous êtes déjà totalement engagé dans votre référentiel de code et que vous pouvez annuler toutes les modifications involontaires. Lisez les commentaires ci-dessous. Les choses qui ont fonctionné pour moi pourraient ne pas fonctionner pour vous.


La réponse de Ron était sur le point de m'aider, mais je devais faire quelques ajustements pour que cela fonctionne dans Visual Studio.

1) ouvrez la solution que vous souhaitez corriger.

2) assurez-vous que toutes les modifications en attente sont archivées, car vous allez potentiellement éditer un crapton de documents et ne souhaitez pas annuler vos autres modifications en attente.

3) dans n'importe quel document, appuyez sur Ctrl + F pour ouvrir le champ de recherche, puis cliquez sur l'icône représentant une flèche vers le bas sur le côté gauche pour le développer dans le champ de recherche/remplacement.

4) Dans la ligne supérieure, collez:

([^\r]|^)\n

Dans la ligne du bas, collez:

\r\n

5) Activez l'icône .* pour la fonction "Utiliser des expressions régulières".

6) Modifiez le menu déroulant à côté de cette icône pour qu'il apparaisse "Solution complète" ou "Tous les documents ouverts" ou tout ce qui convient à votre situation.

7) Cliquez sur le bouton "Remplacer tout" qui affiche ab -> ac dans l'icône.

Et c'est tout!

En passant, j'en avais besoin, car les modèles de script d'Unity sont tous créés dans MonoDevelop, de sorte qu'ils disposent des fins de ligne Mac par défaut. Je devais éditer tous les documents dans le chemin:

C:\Program Files\Unity\Editor\Data\Resources\ScriptTemplates

Je les ai donc tous ouverts dans Visual Studio, en suivant le processus décrit ci-dessus, en utilisant "Tous les documents ouverts" à l'étape 6.

1
Jim Yarbro

Si vous avez installé Cygwin avec le paquet cygutils, vous pouvez utiliser cette chaîne de commandes à partir du shell Cygwin:

unix2dos -idu * .cpp | sed -e 's/0 [1-9] [0-9] //' -e '/ [1-9] [0-9] * 0 //' | sed '/ [1-9] [0-9] /! d' | sed -e 's/[1-9] [0-9] //' | xargs unix2dos

(Remplacez * .cpp par le caractère générique dont vous avez besoin)

Pour comprendre comment cela fonctionne, la commande unix2dos est utilisée pour convertir les fichiers, mais seuls les fichiers dont les fins de ligne sont incohérentes (c'est-à-dire un mélange UNIX et DOS) doivent être convertis. L'option -idu affiche le nombre de fins de ligne dos et unix dans le fichier. Par exemple:

   0     491  Acad2S5kDim.cpp
 689       0  Acad2S5kPolyline.cpp
   0     120  Acad2S5kRaster.cpp
 433      12  Acad2S5kXhat.cpp
   0     115  AppAuditInfo.cpp

Ici, seul le fichier Acad2S5kXhat.cpp doit être converti. Les commandes sed filtrent la sortie pour générer une liste des fichiers à convertir, qui sont ensuite traités via xargs.

0
John Matthews