Visual Studio规范不一致的行尾是什么意思?

Visual Studio偶尔会告诉我:

以下文件的行尾不一致你想规范行尾吗?

然后它给我一个不同标准的下拉列表,比如Windows、Mac、Unix和几个Unicode标准。

这意味着什么,如果我点击Yes会发生什么?

177951 次浏览

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

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

因为你是在Visual Studio中开发,你显然想在下拉菜单中选择“Windows”。: -)

有些行以\n结尾。

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

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

您正在编辑的文件已使用其他未使用相同行结束符的编辑器进行编辑,导致文件的行结束符混合。

行尾使用的ASCII字符是:

CR,回车
LF,换行

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

维基百科换行符的文章可能会帮助你。以下是节选:

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

.

.

这意味着,例如,你的一些文本行带有<Carriage Return><Linefeed> (Windows标准),而一些文本行仅以<Linefeed> (Unix标准)结束。

如果你点击'是'这些行结束在你的源文件将被转换为所有相同的格式。

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

Visual Studio 2008有一个插件,它可以在保存文件时转换行结束格式。你可以在这里下载:http://grebulon.com/software/stripem.php

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

一般来说(对于软件开发),我们接受多平台的行结束问题,但是让版本控制软件来处理它。

如果您正在使用Visual Studio 2012:

进入菜单文件高级保存选项→选择线的结局类型为Windows (CR LF)

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

__abc0→__abc1→__abc2→__abc3→__abc4

当你从web复制粘贴一些东西时,你可能会得到不一致的行尾。< br > 为了解决这个问题,你可以使用Visual studio扩展“行结束符统一器”,它可以在保存文件时自动使行结束符一致

enter image description here

线的结局也称为换行符行尾(EOL)换行符是字符编码规范(例如ASCII或EBCDIC)中的控制字符或控制字符序列,用于表示一行文本的结束和新一行的开始。一些文本编辑器在你按回车键时设置/实现这个特殊字符。

回车换行字符是一行结束的ASCII表示(终点)。它们将结束字符串的当前行,并开始一个新的行。

然而,在操作系统级别,它们被区别对待:

  • 回车("CR")字符(ASCII 13\0x0D, \r):将光标移动到行首,不前进到下一行。该字符在Commodore和Early 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 &;)字符

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

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

touch .gitattributes

并在其中添加以下内容:

# Enforce Unix newlines
* text=auto eol=lf

这将强制使用Unix 换行行结束字符。

请注意:如果这是一个已经存在的项目,只需运行此命令,使用.gitattributes中指定的新定义的行结束来更新应用程序的文件。

git rm --cached -r .
git reset --hard

这是所有。

我希望这对你们有帮助

我在VS 2019中遇到了这个问题,在为Unix设置换行符配置之前,通过为Windows设置换行符配置解决了这个问题。

Tools > Options > Format on Save > Settings > LineBreak: Windows