在 DOS/Windows 文本文件中,换行,也称为新行,是两个字符的组合:回车(CR)后跟一个换行(LF)。在 Unix 文本文件中,一行的换行是单个字符:换行(LF)。在 Mac 文本文件中,在 Mac OS X 之前,一行的换行是单个回车(CR)字符。现在的 Mac OS 使用 Unix 风格(LF)的换行。

在 Unix-like 系统上使用换行符为 CRLF 的文件可能会带来不便。

比如说,我将换行符为 CRLF 的 vim 配置文件用于我的 macOS 上的 vim,结果打开 vim 时会出现这样的错误提示:

Error detected while processing /Users/user/.vimrc[14]../Users/user/.vim/pack/themes/start/dracula_pro/colors/dracula_pro.vim:
line 2:
E492: Not an editor command: ^M

在这种情况下,错误的来源是 ^M 字符,这是一个回车符(Carriage Return, CR)。在 Windows 系统中,行尾标记通常为 CRLF(即 \r\n),而在 Unix 和 Linux 系统,包括 macOS 在内,行尾标记只有一个 LF(即 \n)。

因此,你需要将文件的换行符由 CRLF 转换为 LF。

解决方法

CRLF 转 LF

  1. 如果你需要转换的文件有很多,你可以借助 git 的自动转换换行符功能:

    git init  # 建立存储库
    git config core.autocrlf input # 设置提交到存储库时转换为 LF
    git add . && git commit -m "tmp" # 提交所有文件
    git rm --cached -r . # 删除 git 中的缓存文件
    git reset --hard # 重置项目文件

    现在所有包含 CRLF 的文件都将被转换为 LF。

    参考:Converting the End of Line Sequence from CRLF to LF in any of your project files | GitHub

  2. 使用 dos2unix 工具:

    • 转换单个文件:

      dos2unix <CRLF_file>  # 将 `CRLF_file` 替换为你要转换的文件名
    • 转换目录下的所有文件

      find . -type f -print0 | xargs -0 dos2unix --

    参考:How to apply dos2unix recursively to all the contents of a folder? | Stack Exchange

LF 转 CRLF

  1. 借助 git 转换整个项目内的文件

    git init  # 建立存储库
    git config core.autocrlf true # 设置提交到存储库时转换为 LF,从存储库取回时转换为 CRLF
    git add . && git commit -m "tmp" # 提交所有文件
    git rm --cached -r . # 删除 git 中的缓存文件
    git reset --hard # 重置项目文件
  2. 使用 unix2dos 工具:

    • 转换单个文件:

      unix2dos <CRLF_file>  # 将 `CRLF_file` 替换为你要转换的文件名
    • 转换目录下的所有文件

      find . -type f -print0 | xargs -0 unix2dos --

    参考:批量轉換 LF 和 CRLF 的小技巧【詳細步驟】| 台部落

附录:关于 autocrlf 配置的说明:

  • true:提交到存储库时使用 LF,检出时使用 CRLF;
  • input:提交到存储库时使用 LF,检出时不转换(还是 LF);
  • false:不进行任何转换(如果原来是 CRLF,那么提交到存储库时还是 CRLF,检出时也还是 CRLF)(并不是这样,在 macOS 上操作时效果感觉和 input 一样)

git core.autocrlf 配置说明

将文件的换行符由 CRLF 转换为 LF的更多相关文章

  1. 记一次错误排查,主要问题是跨平台文件中换行符(CRLF, LF)和垃圾字符( Caret Notation)

    笔者测试SPEC14的workload的时候,需要自定义workload,又需要在Windows和Linux平台上都要测试,所以就遇到了这么个问题:测试工具报错,但是报出来的错误信息又跟错误对不上. ...

  2. Git 换行符检查 CRLF 与 LF

    遇到的问题 在 git 提交或是签出时,提示如下问题: [git] warning: LF will be replaced by CRLF | fatal: CRLF would be replac ...

  3. Linux文件和windows文件在 换行符的区别

    Linux或Unix文件,和windows文件,在来回处理时,如果不注意 换行符的区别,可能导致程序错误!!!深刻的教训.... 在早期的打印机时代,开始新的一行要占用两个字符的时间.如果到了一行的结 ...

  4. python处理文件的换行符

    我们知道在Windows平台下的换行符是\r\n,而在linux下的换行符是\n.现在写一个简单程序来测试python是如何处理这些换行符的. 准备文件data.txt,该文件在Windows平台下编 ...

  5. ****使用ftp软件上传下载php文件时换行符丢失bug

    在使用ftp软件上传下载php源文件时,我们偶尔会发现在本地windows下notepad++编辑器写好的php文件,在使用ftp上传到linux服务器后,php文件的换行符全部丢失了,导致php文件 ...

  6. python tips:文件读取——换行符的问题

    问题:在windows系统中,换行的符号是'\r\n'.python在读文件的时候为了系统兼容,会默认把'\r','n','\r\n'都视作换行.但是在windows文件中,可能在同一行中同时存在'\ ...

  7. C语言中以文本方式读写文件时换行符转换的注意事项

    我们知道在UNIX下是没有回车符(\r)的,只有换行符(\n),而C语言诞生于UNIX(Linux即面向开源的UNIX,Mac OS也是UNIX发展而来的,而Windows是从MS-DOS发展而来,与 ...

  8. windows下建立文件的换行符^M导致linux下的shell脚本执行错误的解决方式

    常常在windows下编辑的文件远程传送到linux下的时候每行末尾都会出现^M.这将导致shell脚本执行错误,主要是由于dos下的编辑器和linux下的编辑器对文件末行的回车符处理不一致导致. 主 ...

  9. 修改windows文件的换行符

    应用场景: 在办公中,有可能存在,某些命令脚本使用windows下的文本编辑器进行编写 当放到测试环境的Linux中时,运行报错 需要使用的软件:xxd hexdump  dos2unix 1.运行w ...

  10. PHP按行读取文件 去掉换行符"\n"

    第一种: $content=str_replace("\n","",$content); echo $content; 或者: $content=str_rep ...

随机推荐

  1. B码对时方案,基于TI AM62x异构多核工业处理器实现!

    什么是IRIG-B码对时 IRIG-B(inter-range instrumentationgroup-B)码是一种时间同步标准,通常用于精确的时间测量和数据同步,广泛应用于电力.通信.航空等领域. ...

  2. mac idea 更换主题

    使用 主题一 xcode-dark-theme:点我直达 主题二 one-dark-theme:点我直达 主题三 dark-purple-theme:点我直达 主题四(推荐) vuesion-them ...

  3. yb课堂 新版Vue+脚手架Vue-Cli 4.3安装 《二十七》

    本地搭建Vue.CLI.Cube-UI相关框架 什么是Vue 一套用于构建用户界面的渐进式框架.与其他大型框架不同的是,Vue被设计为可以自底向上逐层应用.Vue的核心库只关注视图层,不仅易于上手,还 ...

  4. C# 日期帮助类

    using System; using System.Data; namespace Erp.Ship.Tool { [Serializable] public enum DateInterval { ...

  5. mac 安装jdk1.8 附详细教程

    详细步骤 下载 链接: https://pan.baidu.com/s/1xQr6_9_7lFNtSes7HsKveA 密码: edme 安装包 一直按继续 配置系统环境变量 上一步骤,实标上,我们只 ...

  6. C++ Cast And Go Cast

    C++ A static_cast can be used to explicitly convert between related pointer types, such as void* and ...

  7. 存储器与CPU的连接

    存储器与CPU连接分主要看前五步 1.首先根据给出的地址范围写出二进制码 2.确定芯片的类型和数量 3.确定地址线 4.确定片选信号 要注意MREQ是低电平有效,要连到138译码器的低电平

  8. Apache Kyuubi 在小米大数据平台的应用实践

    导读:今天分享的主题是<Kyuubi 在小米大数据平台的应用实践>,主要分为四部分内容: Kyuubi 在小米的落地过程 打造易用和高可用的 Kyuubi 服务 基于 kyuubi 的改进 ...

  9. 算法金 | 秒懂 AI - 深度学习五大模型:RNN、CNN、Transformer、BERT、GPT 简介

    1. RNN(Recurrent Neural Network) 时间轴 1986年,RNN 模型首次由 David Rumelhart 等人提出,旨在处理序列数据. 关键技术 循环结构 序列处理 长 ...

  10. Django4全栈进阶之路24 项目实战(报修类型表):CKEditor富文本

    CKEditor是一个强大的富文本编辑器,可以用于在网站或应用程序中创建和编辑内容.以下是在安装和使用CKEditor的一般步骤: 安装CKEditor: 下载CKEditor:访问CKEditor官 ...