问题:
有的时候, 我们把一个在windows上修改过的文件拿到linux上用vim打开之后,每行末尾会出现多余的字符 "^M",这是怎么回事呢?
1.CR/LF介绍
CR是Carriage-Return的缩写,即回车;
LF是Line-Feed的缩写,即换行。
CR和LF是在计算机终端还是电传打印机的时候遗留下来的东西。电传打字机就像普通打字机一样工作。
在每一行的末端,CR命令让打印头回到左边。LF命令让纸前进一行。
虽然使用卷纸的终端时代已经过去了,但是,CR和LF命令依然存在,许多应用程序和网络协议仍使用这些命令作为分隔符。
Linux(unix) 和 mac 默认使用 "\n" 作为换行符;
Windows 默认使用 "\r\n" 作为换行符;
2.Unix(Linux)的换行符
Linux 下换行符是 "\n"。
"\n" 在 ACSII表中 对应 LF , ACSII值为 10 ,即0x0a (16进制)
3.windows下换行符
windows 下换行符是 "\r\n"。
"\r" 在ACSII表中对应 "CR", ACSII值为 13 ,即0x0d (16进制) 。
"\r" 在vim中被解释为 "^M" 。
4. unix/windows格式换行符转换
4.1 在linux上可以使用以下工具进行转换
dos2unix : 将windows风格换行符转换为unix风格换行符
unix2dos: 将unix风格换行符转换为windows风格换行符
4.2 在windows上CRLF和LF的转换
4.2.1 使用dos2unix/unix2dos 转换
下载windows版本的 dos2unix/unix2dos,
dos2unix - Browse /dos2unix/7.5.1 at SourceForge.net
使用方法参考dos2unix工具中
dos2unix-7.5.1-win64-nls/share/doc/dos2unix-7.5.1/dos2unix.htm
example 和 RECURSIVE CONVERSION 章节
4.2.2 在windows上常用的代码编辑器一般都支持CRLF和LF的转换
比如说 VsCode, 在右下角可以选择 LF 或者CRLF;
其他编辑器的操作大同小异。
需要默认设置的话, 在设置里修改