在 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. Linux Redis 服务设置开机自启动

    @ 目录 前言 一.准备工作 二.操作步骤 2.1 修改redis.conf文件 2.2 创建启动脚本 2.3 设置redis 脚本权限 2.4 设置开机启动 2.5 验证 总结 前言 请各大网友尊重 ...

  2. ubuntu 安装 github desktop

    原文: https://gist.github.com/berkorbay/6feda478a00b0432d13f1fc0a50467f1 sudo wget https://github.com/ ...

  3. Nuxt3 的生命周期和钩子函数(七)

    title: Nuxt3 的生命周期和钩子函数(七) date: 2024/6/30 updated: 2024/6/30 author: cmdragon excerpt: 摘要:文章阐述了Nuxt ...

  4. ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别

    ONNX Runtime简介 ONNX Runtime 是一个跨平台的推理和训练机器学习加速器.ONNX 运行时推理可以实现更快的客户体验和更低的成本,支持来自深度学习框架(如 PyTorch 和 T ...

  5. RK3568J“麒麟”+“翼辉”国产系统正式发布,“鸿蒙”也正在路上!

    RK3568J "麒麟" + "翼辉"国产系统正式发布 近期,创龙科技RK3568J全国产平台(国产化率100%,提供报告)已正式适配两大国产系统:银河麒麟嵌入 ...

  6. SD中的VAE,你不能不懂

    什么是VAE? VAE,即变分自编码器(Variational Autoencoder),是一种生成模型,它通过学习输入数据的潜在表示来重构输入数据. 在Stable Diffusion 1.4 或 ...

  7. vulnhub - w1r3s.v1.0.1

    vulnhub - w1r3s.v1.0.1 高质量视频教程 - b站红队笔记 靶机下载 本地环境 本机ip:192.168.157.131 w1r3s虚拟机设置NAT模式 信息收集 扫描网段得到攻击 ...

  8. SpringBoot的知识点总结和常用注解

    SpringBoot 知识点总结 基础入门 基本介绍.基本特性.核心模块.版本选择.环境要求.安装集成.技快速开发接口.Maven Wrapper.Spring Boot CLl 配置管理 配置类.配 ...

  9. [oeasy]python0109_tty_打字头_电传打字机_字模_点阵字库

    点阵字库 回忆上次内容 上次回顾了 字符字型 的 进化过程 从 谷腾堡 活字 到 罗马正字 和 意大利斜体   罗马帝国战斗力的征服 和 基督教文化传播 使得 拉丁字符 在日耳曼语地区广泛传播 种葡萄 ...

  10. 使用 useRequestEvent Hook 访问请求事件

    title: 使用 useRequestEvent Hook 访问请求事件 date: 2024/7/23 updated: 2024/7/23 author: cmdragon excerpt: 摘 ...