Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法

这篇具有很好参考价值的文章主要介绍了Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题现象

git diff 时发现下面的情况,新修改的代码之处都是携带 ^M 字符,
Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法

初步分析

肯定是因为 Windows 和 Linux 系统之间换行符标准不同导致的。

  • CR(Carriage Return):ASCII 码中的控制符,代表回车。意思是将光标移到当前行的首位。用转义序列 "\r" 表示;
  • LF(Line Feed):ASCII 码中的控制符,代表换行。意思是代表一行文本的结束,将光标移到下一行,用转义序列 "\n" 表示。
  1. Windows 系统采用 CRLF(回车+换行)表示下一行,即 "\r\n"
  2. Linux/UNIX 系统采用 LF 表示下一行,即 "\n"
  3. MAC 系统采用 CR 表示下一行,即 "\r"

Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法

进一步查看

通过 vim 打开查看文件,设置 :set list 进一步查看,没看出差异。
Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法

再查看文件类型,显示如下:

file  fileName.c
fileName.c: C source, Unicode text, UTF-8 text, with CRLF line terminators

上面可以明显看出提示有 CRLF 结束UTF-8 格式文本。

再次通过 cat -A fileName 命令查看文件内容如下,原来,整个文件全都是携带 ^M 字符。
Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法
若使用 od 命令(输出指定二进制、八进制、十六进制或其它格式编码的字符)查看文件内容截图如下:

od -tc fileName

Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法
通过 od 命令查看,可以很清晰的看到 CRLF(回车+换行)符号。

问题解决

既然已经定位出问题,那么接下来就是看怎么修改文本行结尾 ^M 控制字符。
本篇针对不同场景,有不同解决办法。

Source Insight

依次选择【Options】->【Preferences】->【Files】->【Other】->【Default line ending:】选择 Unix(LF) 即可。

Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法

dos2unix

直接使用 linux 工具 dos2unix

dos2unix fileName

Nodpad++

依次选择 【编辑(E)】->【文档格式转换(E)】->【转为 Unix(LF)
Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法

Vim

前面提到直接使用 vi/vim fileName 是没看到 ^M ,但是通过 cat -A fileName 命令是可以看到 ^M 。 因此这里需要使用 vim -b fileName 命令来查看。

vim -b fileName
:% s/^M$//g              #vim 底线命令模式(Last line mode)
:% s/^M//g               #vim 底线命令模式(Last line mode)
:% s/\r//g               #vim 底线命令模式(Last line mode)

注意:上面的 ^M 需要通过 CTRL+V 和 CTRL+ M ,即按住CTRL键,然后依次按下 V 和 M 键。

sed 命令

sed 命令同上面的 vim 方式基本一样,只是命令行的差异。

sed -i s/^M$//g fileName
sed -i s/^M//g fileName
sed -i s/\r//g fileName

综上

综上是几种解决 ^M 问题的办法。
想必仔细阅读的读者心里会有一个小的疑问,为何最后的两种方式中, ^M 可以用 \r 替换呢?
这是因为,前面描述 ASCII 和 回车、换行符之间关系的时候提到:

  • CR,用转义序列 "\r" 表示;
  • LF,用转义序列 "\n" 表示;
  • CRLF,用转义序列 "\r\n" 表示;

我们在 Linux 环境中使用 bash 查看文本,在文本行结尾通常会看到(显示)$^M$,其中 ^M 就表示回车(CR,用转义序列 "\r" 表示),$ 表示换行(用转义序列 "\n" 表示)。即:

  • "\r" 在类Unix系统下会被显示为 ^M
  • "\n" 在类Unix系统下会被显示为 $

So,读者认为命令行中的 "\r"^M 是否可以相互替换呢?

Reference

ASCII 表
Ascii码表
How to remove CTRL-M (^M) characters from a file in Linux
What is the ^M character called?
https://www.jianshu.com/p/cff726d86978文章来源地址https://www.toymoban.com/news/detail-445106.html

到了这里,关于Linux 中去除 vi/vim 和 git diff 中的 ^M 问题解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Linux-- vi / vim 编辑器

            目录 vi vim 编辑器的三种编辑模式 vi vim 的使用         模式的切换          命令模式下的命令         底线模式 vi vim 是visual interface 的简称, 是linux中的经典文本编辑器, 同图形化界面中的文本编辑器一样, 但是vi是使用命令行来对文本进行编辑的最好选择

    2024年02月09日
    浏览(48)
  • 【日常积累】Linux中vi/vim的使用

    vim是由vi发展演变过来的文本编辑器,因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,由于其功能相比vi来说更加强大,所以在实际工作中的使用更加广泛。 Vim具有多种工作模式,常用的工作模式有:普通模式、插入模式、命令模式。其中,普通模式可以

    2024年02月11日
    浏览(46)
  • Linux---vi/vim编辑器、查阅命令

    1.  vi vim编辑器三种模式 vim 是 vi 的加强版本,兼容 vi 的所有指令,不仅能编辑文本,而且还具有 shell 程序编辑的功能, 可以不同颜色的字体来辨别语法的正确性,极大方便了程序的设计和编辑性。 命令模式(Command mode): 命令模式下,所敲的按键编辑器都理解为命令,

    2024年02月06日
    浏览(49)
  • Linux入门教程——VI/VIM 编辑器

    本文小新为大家带来 Linux入门教程——VI/VIM 编辑器 相关知识,具体内容包括 VI/VIM是什么 ,VIM的三种工作模式介绍,包括: 一般模式 , 编辑模式 , 指令模式 ,以及 模式间转换 等进行详尽介绍~ 不积跬步,无以至千里;不积小流,无以成江海。每天进步一点点,在成为强

    2024年02月21日
    浏览(47)
  • Linux——vi命令使用详解(vim编辑器)

    1、三种模式以及切换         ①命令行模式            ②插入模式 (进入文件编辑,按ESC进入底行模式)         ③底行模式 2、vi模式切换命令         a    ---  [进入编辑状态,从当前光标的位置后一个插入字符]         A    --- [进入编辑状态,从当前行尾插入字符

    2024年02月07日
    浏览(46)
  • 5-Linux操作系统 vi/vim编译器

    一、vi编译器介绍   Vi编辑器是所有Unix及Linux系统下标准的编辑器,类似于windows系统下的notepad(记事本)编辑器,由于在Unix及Linux系统的任何版本,Vi编辑器是完全相同的,因 此可以在其他任何介绍vi的地方都能进一步了解它,Vi也是Linux中最基本的文本编辑器,学会它后,

    2024年02月08日
    浏览(38)
  • Linux系统使用超详细(十)~vi/vim命令①

    vi/vim命令有很多,其实只有少数的用法对于我们日常工作中起到了很大帮助,但是既然我选择梳理Linux的学习笔记,那么一定全力把自己的理解和学习笔记的内容认真整理汇总,内容或许有错误,还请发现的C友们发现了及时指出。 最近工作繁忙,断更了几天,今天的内容先整

    2024年01月19日
    浏览(48)
  • linux虚拟机中vi / vim编辑文件,保存并退出

    1.打开文件 vi / vim + 文件名(例:   vim word.txt  )。          若权限不够,则在前方添加 sudo  (例: sudo vim word.txt  )来增加权限; 2.进入文件,按  i    键进入编辑模式。 3.编辑结束后按  Esc    键跳出编辑命令。 4.命令  :wq  (保存文件并退出)。 5.退出后可使用

    2024年02月08日
    浏览(39)
  • 53.Linux day03 文件查看命令,vi/vim常用命令

    今天进行了新的学习。 目录 1.cat a.查看单个文件的内容: b.查看多个文件的内容:  c.将多个文件的内容连接并输出到一个新文件: d.显示带有行号的文件内容:  2.more  3.less  4.head 5.tail  6.命令模式 7.插入模式   8.图片解析 用于查看和连接文件内容 以下是 cat 命令的基本

    2024年02月12日
    浏览(38)
  • Linux vi/vim以及三种模式常用快捷键

    vi和vim vi 和 vim 都是在 Linux 系统中的文本编辑器。 vim 实际上是 vi 的增强版,提供了更多的功能和改进。 vi : vi 是一个经典的文本编辑器,几乎在每个 Linux 发行版中都预装了。 vi 的使用可以分为三个主要模式:命令模式(Command mode)、插入模式(Insert mode)和底行模式(

    2024年02月14日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包