Visual Studio通过规范化不一致的行结尾意味着什么?

时间:2009-02-16 14:59:05

标签: visual-studio line-endings

Visual Studio偶尔会告诉我:

  

以下文件中的行结尾不一致。你想要标准化行结尾吗?

然后它给了我一个不同标准或下载的下拉菜单,例如Windows,Mac,Unix和几个Unicode。

如果点击Yes

,这意味着什么以及会发生什么?

11 个答案:

答案 0 :(得分:200)

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

标准化行结尾只是确保所有行结束字符都是一致的。它会阻止一行以\r\n结尾,另一行以\r\n结尾;第一个是Windows线端对,而其他的通常用于Mac或Linux文件。

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

答案 1 :(得分:71)

有些行以\n结尾。

其他一些行以\r\n结尾。

Visual Studio建议您使所有行结束相同。

答案 2 :(得分:40)

如果您使用的是Visual Studio 2012:

转到菜单文件高级保存选项→选择行结尾键入 Windows(CR LF)

答案 3 :(得分:11)

要打开/关闭选项,请按照菜单栏中的以下步骤操作:

工具选项环境文档检查加载时的一致行结尾< / em>的

答案 4 :(得分:7)

您正在编辑的文件已使用其他编辑器进行编辑,该编辑器不使用相同的行结尾,从而生成带有混合行结尾的文件。

用于行结尾的ASCII字符为:

CR,回程
LF,换行

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

答案 5 :(得分:6)

维基百科newline article可能会帮助你。这是一段摘录:

  

不同的换行符约定通常会导致在其间传输的文本文件   不正确显示的不同类型的系统。例如,源自的文件   在运行的某些程序上,Unix或Apple Macintosh系统可能会显示为一条长行   微软Windows。相反,当查看源自Windows计算机的文件时   在Unix系统中,额外的CR可以显示为^ M或在每行的末尾或作为a   二线休息。

答案 6 :(得分:5)

这意味着,例如,您的一些文本行带有<Carriage Return><Linefeed>(Windows标准),有些只带有<Linefeed>(Unix标准)。

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

这对编译器没有任何影响(因为行尾只计算为空格),但它可能会对其他工具产生一些影响(例如版本控制系统上的'diff')。

答案 7 :(得分:4)

它不仅仅是Visual Studio ......它可以是读取文件,编译器,链接器等必须能够处理它的任何工具。

一般情况下(对于软件开发),我们接受多平台线路结束问题,但让版本控制软件处理它。

答案 8 :(得分:2)

Visual Studio 2008有一个加载项,用于在保存文件时转换行结束格式。您可以在此处下载:http://grebulon.com/software/stripem.php

答案 9 :(得分:2)

当您从Web复制粘贴内容时,可能会得到不一致的行尾。
为了解决这个问题,您可以使用Visual Studio扩展“行尾统一符”,它可以在保存文件时自动使行尾一致。

enter image description here

答案 10 :(得分:0)

换行符也称为换行符行尾(EOL)换行符是控制字符或字符编码规范(例如ASCII或EBCDIC)中的控制字符序列,用于表示一行文本的结尾和一个新文本的开头。当您按下 Enter键时,某些文本编辑器会设置/实现此特殊字符。

回车换行字符是行尾( EOL )的ASCII表示。他们将结束字符串的当前行,并开始新的一行。

但是,在操作系统级别,它们的处理方式有所不同:

  • 回车符(ASCII 13 \ 0x0D,\ r):将光标移动到该行的开头而不前进到下一行。在Commodore和早期Macintosh操作系统(Mac OS 9和更早版本)中,此字符用作换行符。

  • 换行符(“ LF”)字符(ASCII 10 \ 0x0A,\ n):将光标向下移动到下一行而不返回到行首。此字符在基于Unix的系统(Linux,macOS X,Android等)中用作换行符。

  • 回车符(“ CRLF”)字符(0x0D0A,\ r \ n):这实际上是两个ASCII字符,是CR和LF字符的组合。它将光标向下移动到下一行和该行的开头。在大多数其他非Unix操作系统(包括Microsoft Windows和Symbian OS)中,此字符用作换行符。

在Visual Studio中标准化不一致的行尾意味着要为所有文件选择一种字符类型。可能是:

  • 回车换行符(“ CRLF”)
  • 换行符(“ LF”)
  • 回车符(“ CR”)

但是,可以使用根目录中的readme文件以更好的方式进行设置,以避免在将文件从一个操作系统移动到另一个操作系统时发生冲突。

只需在应用程序的根目录中创建一个名为.gitattributes的新文件:

.gitattributes

并在其中添加以下内容:

touch .gitattributes

这将强制使用Unix 换行符换行符。

注意:如果这是一个已经存在的项目,只需运行此命令,即可使用# Enforce Unix newlines * text=auto eol=lf 中指定的新定义的行结尾来更新应用程序的文件。

.gitattributes

仅此而已。

我希望这会有所帮助