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

Met*_*uru 233 line-endings visual-studio

Visual Studio偶尔会告诉我:

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

然后它给我一个不同标准或类似的下拉菜单,如Windows,Mac,Unix和几个Unicode.

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

Ken*_*ite 205

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

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

由于您是在Visual Studio中开发的,因此您显然希望从下拉列表中选择"Windows".:-)

  • 啊,但如果您只是使用VS来修复不适用于Windows的内容呢?快速修复Linux实用程序或直接C/C++的东西,并且您不希望添加CRLF?等等 - 现在你想让MS读懂你的想法并知道使用哪个?<g> VS团队无论哪种方式都错了,不是吗?啧! (52认同)
  • 那么为什么视觉工作室关注线条如何结束,它显然能识别所有不同的类型,它应该只是快乐和闭嘴. (20认同)
  • 问题不在于VS无法应对Unix行结尾 - 它可以.警告告诉您行结尾是_inconsistent_ - 即文件中的某些行是CRLF而有些行是LF.VS会解决这个问题,但是你工具链中的其他应用程序可能没有,因此它会警告你.如果您不关心这一点,请关闭警告:选项 - >环境 - >文档 - >'检查加载时的一致行结束'.如果您正在跨多个平台处理产品,则此警告非常有用. (17认同)
  • 哦,肯克,你是对的,如果我正在编辑一些我打算在Linux中编译的文件,我知道如果编译器没有完全符合它需要的行结束,那么编译器就会窒息死亡然后我会有很高兴VS让我选择......谢谢! (6认同)
  • 只需换行. (5认同)
  • 没有回车符的行如何结束...? (2认同)
  • @AntonioOoi:恐怕只要 Windows 存在,就没有跨平台的行尾。Windows/DOS 始终使用 CR/LF,而我所知道的所有其他操作系统仅使用 LF。这里的要点是,规范化行结尾将确保无论您使用哪一个,它们都是相同的,这使得在需要时进行切换变得更加容易。如果您所做的大部分操作都不是 Windows,则仅使用 *nix 样式 LF;如果大部分是 Windows,则使用 CR/LF 对。 (2认同)

Ale*_*ort 73

有些行以\n.

其他一些行以\r\n.

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


小智 40

如果您使用的是Visual Studio 2012:

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

  • 如果看不到该选项,可以通过转到Tools-> Customize,进入命令选项卡并添加命令来自定义文件菜单. (4认同)

Cod*_*shi 12

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

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


Pro*_*ton 12

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

\n

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

\n

然而,在操作系统层面,它们的处理方式有所不同:

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

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

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

    \n
  • \n
\n

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

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

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

\n

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

\n
touch .gitattributes\n
Run Code Online (Sandbox Code Playgroud)\n

并在其中添加以下内容:

\n
# Enforce Unix newlines\n* text=auto eol=lf\n
Run Code Online (Sandbox Code Playgroud)\n

这强制执行 Unix换行行结束字符。

\n

注意:如果这是一个已经存在的项目,只需运行此命令即可使用.gitattributes.

\n
git rm --cached -r .\ngit reset --hard\n
Run Code Online (Sandbox Code Playgroud)\n

就这样。

\n

我希望这有帮助

\n


mon*_*ker 7

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

用于行结尾的ASCII字符是:

CR,回车
LF,换行

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


Ric*_*ett 6

维基百科的换行文章可能会帮助你.这是一段摘录:

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


Jay*_*hah 6

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

在此输入图像描述

  • 仅供参考,这是 VS 2019 已弃用的插件。 (2认同)

Chr*_*isW 5

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

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

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


Pet*_*r Y 5

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

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