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

On Mac, line endings are automatically being set to Windows line endings, how do I change that?

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

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

分隔

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

  • 在VIM中,当你open/save文件时,如果文件当前正在使用WindowsCRLF,你会看到一个底部状态消息中的小[dos]。如果它已经是 unix 格式,你不会在那里看到 [dos]

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

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

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

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

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

或者,听起来您的存储库已经更新为 Unix 风格的 LF 字符,因此您可能只想提取并使用它。