在 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. python基础-列表list [ ]

    列表的定义和操作 列表的特性: 元素数量 支持多个 元素类型 任意 下标索引 支持 重复元素 支持 可修改性 支持 数据有序 是 使用场景 可修改.可重复的 一批数据记录场景 # 定义一个列表list ...

  2. 三屏异显案例分享,基于全国产RK3568J工业平台!

    在工业领域中,能否更灵活.更高效地在主屏幕进行主要任务,并在其他副屏幕上进行其他次要任务(例如查看参考资料.监控其他应用程序),一直都是许多工业领域客户面临的刚需,而"多屏异显"功 ...

  3. T3/A40i支持Linux-5.10新内核啦,Docker、Qt、Python统统升级!

    自2021年创龙科技推出全志国产化率100%的T3/A40i工业核心板后,不到两年时间已超过800家工业客户选择创龙科技T3/A40i平台.随着客户产品的不断升级与迭代,部分"能源电力&qu ...

  4. 坚果云与floccus实现Chrome书签国内跨设备、跨平台同步

      本文介绍基于floccus插件与坚果云协同使用的方法,对浏览器的书签进行实时在线同步的操作.   在工作与学习中,我们时常希望在不同浏览器之间实现书签的同步:而一些传统的浏览器书签同步方案,或多或 ...

  5. Qt 学习笔记 - 第四章 - Qt的三驾马车之 - 网络编程

    Qt 学习笔记全系列传送门: Qt 学习笔记 - 第一章 - 快速开始.信号与槽 Qt 学习笔记 - 第二章 - 添加图片.布局.界面切换 Qt 学习笔记 - 第三章 - Qt的三驾马车之一 - 串口 ...

  6. java springboot监听事件和处理事件

    在Spring Boot中,监听和处理事件是一种常用的模式,用于在应用程序的不同部分之间传递信息.Spring 的事件发布/订阅模型允许我们创建自定义事件,并在这些事件发生时由注册的监听器进行处理.这 ...

  7. 存储系列DAS,SAN,NAS常见网络架构

    随着主机.磁盘.网络等技术的发展,对于承载大量数据存储的服务器来说,服务器内置存储空间,或者说内置磁盘往往不足以满足存储需要.因此,在内置存储之外,服务器需要采用外置存储的方式扩展存储空间,今天在这里 ...

  8. Microsoft宣布将在开发人员会议上专注于.NET Aspire

    2024年7月15日微软宣布,其开发执行团队将在下个月的开发者大会上聚焦于使用 .NET Aspire 的云原生开发,以及结合人工智能的"现代 SQL"在 Microsoft Fa ...

  9. Modbus转Profinet网关模块连PLC与流量计通讯案例

    一.案例背景 在饮品加工厂中,会涉及到流量计的使用,然而达到对流量计的精准控制和数据采集需要用到PLC,由于PLC和流量计可能使用不同的通信协议(如Profinet和Modbus),造成两者不能自接进 ...

  10. 第八节 JMeter基础-高级登录【数据库数据驱动】

    声明:本文所记录的仅本次操作学习到的知识点,其中商城IP错误,请自行更改. 背景:获取数据库用户表中的数据进行登录接口测试.思路: 引用jar包[测试计划]. 设置数据库的连接信息,取变量名db1-- ...