Visual Studio通过标准化不一致的行尾是什么意思?


238

Visual Studio偶尔会告诉我:

以下文件中的行尾不一致。您要归一化行尾吗?

然后,它为我提供了不同标准或诸如Windows,Mac,Unix和一些Unicode标准之类的东西。

这是什么意思,如果单击,会发生Yes什么?


Visual Studio向我显示了相同的消息,但是它所指的“文件”实际上是一个文件夹!那是什么意思?!
Panic Panic

我制作了一个小工具来对整个目录执行此操作,或者通过一组目录来递归特定扩展名的所有文件(例如* .c或* .h),尽管我使用的是Delphi,但该工具适用于任何Windows源代码文件。包括源代码和二进制文件(exe)。它将报告哪些行具有多余的换行符(即缺少回车符)或多余的回车符(即缺少换行符)。 docs.google.com/file/d/0B07SrKpE8ErmbHZ1SWkxT3RLczA/...
沃伦P

1
可能是由引起的git。另请参阅:stackoverflow.com/questions/170961/…–
Jess

2
他们应该在下拉菜单中选择“从文件/项目的其余部分中选择最常用的行结束类型”。
MetaGuru

Answers:


213

这通常意味着您的行以回车/换行对以外的其他结尾。当您从网页复制并粘贴到代码编辑器中时,通常会发生这种情况。

规范行尾只是确保所有行尾字符都一致。它防止一行\r\n\r或结尾\n;第一个是Windows线端对,而其他通常用于Mac或Linux文件。

由于您是在Visual Studio中进行开发,因此显然您需要从下拉列表中选择“ Windows”。:-)


1
没有回车的线路如何结束...?
MetaGuru

23
因此,为什么可视化工作室在视觉工作室关心行尾如何结束,显然可以识别所有不同的类型,所以它应该开心并闭嘴。
MetaGuru

53
嗯,但是,如果您只是使用VS修复不适合Windows的内容该怎么办?快速修复Linux实用程序或直接使用C / C ++的程序,您是否不想添加CRLF?等等,现在您希望MS读懂您的想法并知道该使用哪个?<g> VS团队的任何一种方式都是错误的,不是吗?嘘!
肯·怀特

6
噢,请问Ken,您是对的,如果我恰好正在编辑一些计划在Linux上编译的文件,并且我知道如果编译器没有所需的行尾,那么编译器将窒息而死。很高兴VS让我选择...谢谢!
MetaGuru 2010年

19
问题不是VS无法应付Unix行尾-可以。警告告诉您行尾不一致 -即文件中的某些行为CRLF,而某些行为LF。VS可以解决这个问题,但是工具链中的其他应用程序可能无法解决,因此它警告您。如果您不关心此问题,请关闭警告:选项->环境->文档->'检查负载一致的行尾'。如果您正在跨多个平台开发产品,则此警告可能非常有用。
the_mandrill


40

如果您使用的是Visual Studio 2012:

转到菜单文件高级保存选项 →选择行尾类型为Windows(CR LF)


1
该选项不会出现在Visual Studio 2010 Ultimate版本10.0.40219.1 SP1Rel的“文件”菜单上。
DOK 2012年

1
@DOK,在Visual Studio 2010 Premium版本的“文件”菜单上,它可以!!
彼得

4
如果看不到该选项,则可以通过以下方法来自定义文件菜单:转到“工具”->“自定义”,进入“命令”选项卡并添加命令。
罗布2013年

是否有一个通用设置会同时影响所有文件?在解决方案下对所有来源执行此操作很痛苦。
克劳斯

12

要打开/关闭选项,请从菜单栏中执行以下步骤:

工具选项环境文档检查加载时行尾是否一致


7

您正在编辑的文件已使用其他不使用相同行尾的编辑器进行了编辑,从而导致文件中混合了行尾。

行尾使用的ASCII字符是:

CR,回车
LF,换行

Windows = CRLF
Mac OS 9或更早版本= CR
Unix = LF


6

Wikipedia 换行符文章可能会对您有所帮助。这是节选:

不同的换行符约定通常会导致在不同类型的系统之间传输的文本文件无法正确显示。例如,源自Unix或Apple Macintosh系统的文件在Microsoft Windows上运行的某些程序上可能会显示为长行。相反,当查看源自Unix系统上Windows计算机的文件时,多余的CR可能显示为^ M或每行的末尾或第二个换行符。


5

举例来说,这意味着您的某些文本行以<Carriage Return><Linefeed>(Windows标准)结尾,而某些文本行以<Linefeed>(Unix标准)结尾。

如果单击“是”,则源文件中的行尾将转换为所有相同的格式。

这对编译器没有任何影响(因为行尾仅算作空格),但可能对其他工具(例如版本控制系统上的“ diff”)有所影响。


4

不只是Visual Studio ...它是任何能够读取文件,编译器,链接器等的工具。

一般而言(对于软件开发),我们接受多平台行尾问题,但让版本控制软件来处理。


1
我同意。最好让您的SCM系统做到这一点。如果您正在使用SVN,又见stackoverflow.com/questions/15687/...
kgriffs

完全同意。如果我在做项目,在Windows上,而我的队友正在使用Mac,会发生什么情况。我们将不断将CR更改为CRLF,然后再次更改。最好让SCM将其抽象化。大多数答案只是假设人们是自己工作的,或者每个从事代码工作的人都在使用Windows。
bytedev

3

从Web复制粘贴内容时,可能会出现行尾不一致的情况。
为了解决此问题,您可以使用Visual Studio扩展“行尾统一符”,该扩展名可以在保存文件时自动使行尾一致。

在此处输入图片说明


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.