如何解决整个VS解决scheme的不一致的行结尾?

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

只是为了更完整的回答,这对我来说最合适:

更换

(?<!\r)\n 

 \r\n 

在整个解决scheme与“regEx”选项。

这将设置正确的行结束于所有文件,到目前为止没有正确的行结束。 它使用负向前视来检查\ n之前\ r的不存在。

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

您可以使用“replace为文件”命令并启用正则expression式。 例如,要用标准的Windows回车换行符“\ r \ n”replace具有单个换行符“\ n”的行结尾(例如,来自GitHub),请search:

 ([^\r]|^)\n 

这说创build一个组(这就是为什么需要括号),其中第一个字符不是回车或是行的开始。 行testing的开始实际上只是在文件的最开始,如果它恰好以“\ n”开始。 以下的组是一个换行符。 所以,你会匹配错误行尾的“; \ n”,而不是“\ r \ n”,这是正确的行尾。

并将其replace为:

 $1\r\n 

这表示要保留组($ 1),然后用“\ r \ n”replace“\ n”。

试着做

 Edit > Advanced > Format Document 

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

更新:请小心。 不要这样做,除非你已经完全承诺你的代码库,你可以回滚任何意外的变化。 阅读下面的评论。 事情为我工作可能不适合你。


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

1)打开你想解决这个问题的解决scheme。

2)确保所有待处理的更改都已签入,因为您可能要编辑一个文档,并且不希望使用此function撤销其他未完成的更改。

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

4)在第一行,粘贴:

 ([^\r]|^)\n 

在底线,粘贴:

 \r\n 

5)启用.*图标以“使用正则expression式”function。

6)更改旁边的下拉图标,使其显示“整个解决scheme”或“所有打开的文档”或任何适合您情况的内容。

7)点击图标中显示ab -> ac的“全部replace”button。

而就是这样!

另外,我需要这个,因为Unity的脚本模板都是在MonoDevelop中制作的,所以默认情况下他们已经得到了Mac的行结束符。 我不得不编辑path中的所有文件:

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

所以我在Visual Studio中打开它们,按照上面的步骤,使用第6步中的“All Open Documents”。

如果您已经安装了cygtils软件包的Cygwin,则可以使用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* .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处理这些文件。