【问题标题】:On Mac, line endings are automatically being set to Windows line endings, how do I change that?在 Mac 上,行尾自动设置为 Windows 行尾,我该如何更改?
【发布时间】:2021-06-07 20:46:03
【问题描述】:

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

【问题讨论】:

  • 您好!这个问题可能更适合apple.stackexchange.com。如果你同意,你可以flag it for migration
  • @Brian 我不确定。在What topics can I ask about here? 中说“程序员常用的软件工具” 是主题。如果这是一个随机的 macOS 命令行问题,那么,当然,其他论坛是合适的,但这对我来说似乎是一个话题......
  • @Rob 也许我误读了 Aamir 的问题,但这似乎与任何特定的“程序员常用的软件工具”无关。如果这个问题是关于 git 或 VS Code 的,那么当然,它可能是这里的主题。但似乎 Aamir 的问题在于 macos 本身,因此他们可能会在专用站点上获得更好的支持。另外,由于这个问题只被标记为macos,所以非常、非常很少有人会在这里看到它。
  • 请注意,vim fileformat 魔法并不特定于 Mac:例如,它在 Linux 上的工作方式相同。 (实际上我在.vimrc 中使用set ffs=unix 禁用了对DOS 文件格式的识别,但这可能不是大多数人想要做的。)
  • 问题仅限于给定存储库中的文件还是全球性问题?如果是前者(很可能),几乎可以肯定是由于存储库配置错误造成的,请参阅this guide。如果后者(非常不太可能),请将您的计算机从窗户扔出去,然后换一台新的。

标签: git macos visual-studio-code vim


【解决方案1】:

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

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

  • 在 VIM 中,当您打开/保存文件时,如果文件当前使用的是 Windows CRLF,您会在底部的状态消息中看到一点 [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 字符。快速的 StackOverflow 或网络搜索无疑会给你很多建议。

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

【讨论】:

    猜你喜欢
    • 2012-05-12
    • 2012-04-27
    • 1970-01-01
    • 2021-03-05
    • 2016-02-12
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多