How to fix inconsistent line endings for whole VS solution?

后端 未结 4 1750
天涯浪人
天涯浪人 2021-01-31 14:45

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 f

相关标签:
4条回答
  • 2021-01-31 15:04

    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.

    0 讨论(0)
  • 2021-01-31 15:09

    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.

    0 讨论(0)
  • 2021-01-31 15:16

    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".

    0 讨论(0)
  • 2021-01-31 15:18

    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.

    0 讨论(0)
提交回复
热议问题