在 Mac 上,行尾自动设置为 Windows 行尾,我该如何更改?

每次我 git commit 任何东西时,我都会收到一条警告,指出我的文件具有 Windows 行尾,并且它们将更改为非 Windows 行尾。我不知道为什么会发生这种情况,似乎我现在写入的每个文件都有 Windows 行结尾。
无论编辑器如何,都会发生这种情况,它发生在 Vim 和 VS Code 中。
如何将其改回以使用 Unix 行尾?

stack overflow On Mac, line endings are automatically being set to Windows line endings, how do I change that?
原文答案
author avatar

接受的答案

VIM 和 VS Code 都可以识别文件是使用 macOS/Unix 行结尾(LF,例如仅 0a )还是 Windows 文件结尾(CRLF,例如 0d 后跟 0a )并保留它。您可以使用终端 hexdump -C 命令并查看您的行是否由 0d 0a 或仅 0a 分隔。

最有可能的是,当文件第一次创建时,它们是用 Windows 换行符序列保存的,而 VIM 和 VS Code 只是保留了该设置。

  • 在 VIM 中,当您打开/保存文件时,如果文件当前正在使用 Windows CRLF ,您会在底部的状态消息中看到一个小的 [dos] 。如果它已经是 Unix 格式,您将不会在此处看到 [dos]

    enter image description here

    在 VIM 中,如果是 [dos] 文件,可以使用 :set fileformat=unix 将其转换为 Unix 换行符,然后保存转换后的文件。参见 Vim convert file from DOS to UNIX

  • 在 VS Code 中,您可以设置 eol 设置,但这只会影响新文件。同样,现有文件将保留文件最初使用的任何行尾设置。

    但是,如果您打开一个文件并查看状态栏,您会在右侧看到一个 LFCRLF 。您可以单击它来来回切换。

    enter image description here

  • 有关如何在 git 端处理此问题的信息,请参阅 Configuring Git to handle line endings 。我怀疑您可能想要坚持现有的行为(更新到 Unix 行尾字符),但您会在 GitHub 文档中看到您的选项清楚地列出。但是如果你真的想在你的文件中保留 CRLF,你可以相应地配置你的 repo。

根据您拥有的文件数量,您可能希望找到一种工具来将 Windows/DOS 行尾 CRLF 序列转换为 Unix/macOS LF 字符。快速的 StackOverflow 或网络搜索无疑会给你很多建议。

或者,听起来您的 repo 已经更新为 Unix 风格的 LF 字符,所以您可能只想拉取并使用它。


答案: