如何修复整个VS解决方案的不一致的行结尾?

时间:2012-02-15 14:00:56

标签: visual-studio-2010 line-endings

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

5 个答案:

答案 0 :(得分:24)

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

替换

(?<!\r)\n

\r\n

在整个解决方案中使用“regEx”选项。

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

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

答案 1 :(得分:9)

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

([^\r]|^)\n

这表示创建一个组(这就是为什么需要括号),其中第一个字符不是回车符或是行的开头。行测试的开始实际上仅适用于文件的开头,如果它恰好以&#34; \ n&#34;开头。该小组之后是一个换行符。所以,你会匹配&#34 ;; \ n&#34;它有错误的行尾,但不是&#34; \ r \ n&#34;这是正确的行尾。

并将其替换为:

$1\r\n

这表示保留组($ 1)然后替换&#34; \ n&#34;用&#34; \ r \ n&#34;。

答案 2 :(得分:7)

尝试

Edit > Advanced > Format Document

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

答案 3 :(得分:1)

更新:请小心。除非您已经完全致力于您的代码存储库,否则不要这样做,您可以回滚任何无意的更改。阅读以下评论。对我有用的事情可能不适合你。

Ron的回答非常接近帮助我,但我必须做一些调整才能使它在Visual Studio中运行。

1)打开要解决此问题的解决方案。

2)确保所有挂起的更改都已签入,因为您可能会编辑文档的内容并且不想撤消其他待处理的更改。

3)在任何文档中按Ctrl + F打开搜索框,然后单击左侧的向下箭头图标将其展开到搜索/替换框。

4) 在顶行,粘贴:

([^\r]|^)\n

在底线,粘贴:

\r\n

5)启用.*图标为&#34;使用正则表达式&#34;特征

6)更改该图标旁边的下拉菜单,使其显示&#34;整个解决方案&#34;或者&#34;所有打开的文件&#34;或任何适合你情况的东西。

7)点击&#34;全部替换&#34;在图标中显示ab -> ac的按钮。

那就是它!

顺便说一下,我需要这个,因为Unity的脚本模板都是在MonoDevelop中制作的,所以默认情况下他们已经获得了Mac行结尾。我必须编辑路径中的所有文档:

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

所以我在Visual Studio中打开它们,按照我上面列出的过程,使用&#34;所有打开文档&#34;在第6步。

答案 4 :(得分:0)

如果您安装了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处理这些文件。