【发布时间】:2012-02-15 14:00:55
【问题描述】:
Visual Studio 将在打开文件时检测到不一致的行结尾,并且有一个选项可以为该特定文件修复它。但是,如果我想修复解决方案中所有文件的行尾,我该怎么做?
【问题讨论】:
标签: visual-studio-2010 line-endings
Visual Studio 将在打开文件时检测到不一致的行结尾,并且有一个选项可以为该特定文件修复它。但是,如果我想修复解决方案中所有文件的行尾,我该怎么做?
【问题讨论】:
标签: visual-studio-2010 line-endings
只是为了获得更完整的答案,这对我来说效果最好:
替换
(?<!\r)\n
与
\r\n
在带有“regEx”选项的整个解决方案中。
这将在迄今为止没有正确行尾的所有文件中设置正确的行尾。它使用负前瞻来检查 \n 前面是否存在 \r。
注意其他解决方案:它们将修改所有文件中的所有行(忽略原始行结尾)或删除每行的最后一个字符。
【讨论】:
您可以使用“在文件中替换”命令并启用正则表达式。例如,要将具有单个换行符“\n”(例如来自 GitHub)的行尾替换为标准 Windows 回车换行符“\r\n”,请搜索:
([^\r]|^)\n
这表示创建一个组(这就是需要括号的原因),其中第一个字符不是回车符或者是行首。行测试的开头实际上仅适用于文件的开头,如果它恰好以“\n”开头。跟在组后面的是换行符。因此,您将匹配具有错误行尾的“;\n”,而不是正确的行尾“\r\n”。
并将其替换为:
$1\r\n
这表示保留组 ($1),然后将“\n”替换为“\r\n”。
【讨论】:
\r\n 替换\r?\n 将清除所有行尾,而不涉及使用捕获组。
尝试做
Edit > Advanced > Format Document
然后保存文件,只要文件没有被其他外部编辑器修改,它应该保持一致。为我修复它。
【讨论】:
如果你有 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 处理这些文件。
【讨论】: