【问题标题】:How to fix inconsistent line endings for whole VS solution?如何修复整个 VS 解决方案的不一致行尾?
【发布时间】:2012-02-15 14:00:55
【问题描述】:

Visual Studio 将在打开文件时检测到不一致的行结尾,并且有一个选项可以为该特定文件修复它。但是,如果我想修复解决方案中所有文件的行尾,我该怎么做?

【问题讨论】:

    标签: visual-studio-2010 line-endings


    【解决方案1】:

    只是为了获得更完整的答案,这对我来说效果最好:

    替换

    (?<!\r)\n
    

    \r\n
    

    在带有“regEx”选项的整个解决方案中。

    这将在迄今为止没有正确行尾的所有文件中设置正确的行尾。它使用负前瞻来检查 \n 前面是否存在 \r。

    注意其他解决方案:它们将修改所有文件中的所有行(忽略原始行结尾)或删除每行的最后一个字符。

    【讨论】:

    • 请注意,这种方法对我不起作用。在我的情况下,VS 2017 在调试期间指向错误的行,所以我尝试了这种方法但无济于事。使用 VS 提供的行结束自动修复就可以了。
    • 此解决方案甚至适用于 C++ 文件。格式化文档没有多大帮助。
    【解决方案2】:

    您可以使用“在文件中替换”命令并启用正则表达式。例如,要将具有单个换行符“\n”(例如来自 GitHub)的行尾替换为标准 Windows 回车换行符“\r\n”,请搜索:

    ([^\r]|^)\n
    

    这表示创建一个组(这就是需要括号的原因),其中第一个字符不是回车符或者是行首。行测试的开头实际上仅适用于文件的开头,如果它恰好以“\n”开头。跟在组后面的是换行符。因此,您将匹配具有错误行尾的“;\n”,而不是正确的行尾“\r\n”。

    并将其替换为:

    $1\r\n
    

    这表示保留组 ($1),然后将“\n”替换为“\r\n”。

    【讨论】:

    • \r\n 替换\r?\n 将清除所有行尾,而不涉及使用捕获组。
    【解决方案3】:

    尝试做

    Edit > Advanced > Format Document
    

    然后保存文件,只要文件没有被其他外部编辑器修改,它应该保持一致。为我修复它。

    【讨论】:

    • 这并没有解决我的问题。它改变了当前文件中的很多空白(不仅仅是行尾),并且不影响解决方案中的任何其他文件。
    • 也没有为我修复,(vsc 7.3.2)只是应用源格式,(但不是行尾策略)
    【解决方案4】:

    如果你有 Cygwin 并安装了 cygutils 包,你可以从 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

    (将 *.cpp 替换为您需要的任何通配符)

    要了解其工作原理,unix2dos 命令用于转换文件,但只有行尾不一致的文件(即 UNIX 和 DOS 的混合)需要转换。 -idu 选项显示文件中 dos 和 unix 行结尾的数量。例如:

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

    这里只需要转换 Acad2S5kXhat.cpp 文件。 sed 命令过滤输出以生成需要转换的文件列表,然后通过 xargs 处理这些文件。

    【讨论】:

      猜你喜欢
      • 2012-03-31
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-28
      • 1970-01-01
      • 2021-07-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多