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

5
每次我提交代码时,都会收到一个警告说我的文件有 Windows 换行符,并且它们将被更改为非 Windows 换行符。但我不知道为什么这在第一次发生,似乎现在我写的每个文件都具有 Windows 换行符。无论我使用哪种编辑器(Vim 和 VS Code),都会出现这种情况。如何将其更改回使用 Unix 换行符?

1
你好!这个问题可能更适合 https://apple.stackexchange.com/。如果你同意,你可以[标记它以进行迁移](https://meta.stackoverflow.com/questions/318460/how-to-move-a-question-to-another-site)。 - Brian61354270
1
@Brian 我不是很确定。在这里可以问什么话题?中写道,“程序员常用的软件工具”确实是属于主题范围内的。如果这只是一个随意的macOS命令行问题,那么其他论坛可能更合适,但我认为这个问题是属于主题范围内的。 - Rob
@Rob 或许我误解了 Aamir 的问题,但这似乎与程序员常用的任何特定“软件工具”无关。如果这个问题是关于 git 或 VS Code 等工具的,那么当然可以在这里讨论。但是看起来 Aamir 的问题是关于 macos 本身的,所以他们可能会在专门的网站上获得更好的支持。此外,由于这个问题只被标记为 macos,很少有人会在这里看到它。 - Brian61354270
1
请注意,vim的“fileformat”魔法并不仅适用于Mac:例如,在Linux上它的工作方式相同。 (实际上,我在我的“.vimrc”中使用“set ffs = unix”禁用了对DOS文件格式的识别,但这可能不是大多数人想要做的事情。) - torek
1
问题是否仅限于特定存储库中的文件,还是全局性的?如果是前者(最有可能),几乎肯定是由存储库配置错误引起的,请参阅此指南。如果是后者(非常不可能),那就把你的电脑扔出窗外,换一台新的吧。 - romainl
1个回答

8

VIM和VS Code都能识别文件是否使用macOS/Unix换行符(LF,例如只有0a),或Windows换行符(CRLF,例如0d后跟0a),并保留该设置。您可以使用终端hexdump -C命令,并查看您的行是由0d0a还是仅由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,则可以相应地配置您的存储库。

根据您拥有的文件数量,您可能需要找到一个工具,将Windows / DOS行尾CRLF序列转换为Unix / macOS LF字符。快速搜索StackOverflow或网络肯定会给出很多建议。或者,看起来您的库已经更新为Unix风格的LF字符,因此您可能只需拉取并使用它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接