How to fix inconsistent line endings for whole VS solution?

Visual Studio-2010Line Endings

Visual Studio-2010 Problem Overview


Visual Studio will detect inconsistent line endings when opening a file and there is an option to fix it for that specific file. However, if I want to fix line endings for all files in a solution, how do I do that?

Visual Studio-2010 Solutions


Solution 1 - Visual Studio-2010

Just for a more complete answer, this worked best for me:

Replace

(?<!\r)\n

with

\r\n

in entire solution with "regEx" option.

This will set the correct line ending in all files which didn't have the correct line ending so far. It uses the negative lookahead to check for the non-existance of a \r in front of the \n.

Be careful with the other solutions: They will either modify all lines in all files (ignoring the original line ending) or delete the last character of each line.

Solution 2 - Visual Studio-2010

You can use the Replace in Files command and enable regular expressions. For example, to replace end-of-lines that have a single linefeed "\n" (like, from GitHub, for example) with the standard Windows carriage-return linefeed "\r\n", search for:

([^\r]|^)\n

This says to create a group (that's why the parentheses are required), where the first character is either not a carriage-return or is the beginning of a line. The beginning of the line test is really only for the very beginning of the file, if it happens to start with a "\n". Following the group is a newline. So, you will match ";\n" which has the wrong end-of-line, but not "\r\n" which is the correct end-of-line.

And replace it with:

$1\r\n

This says to keep the group ($1) and then replace the "\n" with "\r\n".

Solution 3 - Visual Studio-2010

Try doing

Edit > Advanced > Format Document

Then save the document, as long as the file doesn't get modified by another external editor, it should stay consistent. Fixes it for me.

Solution 4 - Visual Studio-2010

If you have Cygwin with the cygutils package installed, you can use this chain of commands from the Cygwin shell:

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

(Replace the *.cpp with whatever wildcard you need)

To understand how this works, the unix2dos command is used to convert the files, but only files that have inconsistent line endings (i.e., a mixture of UNIX and DOS) need to be converted. The -idu option displays the number of dos and unix line endings in the file. For example:

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

Here, only the Acad2S5kXhat.cpp file needs to be converted. The sed commands filter the output to produce a list of just the files that need to be converted, and these are then processed via xargs.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBorek BernardView Question on Stackoverflow
Solution 1 - Visual Studio-2010UnchainedView Answer on Stackoverflow
Solution 2 - Visual Studio-2010RonView Answer on Stackoverflow
Solution 3 - Visual Studio-2010FlickayyView Answer on Stackoverflow
Solution 4 - Visual Studio-2010John MatthewsView Answer on Stackoverflow