vim命令如何显示^M换行符并删除

在 Linux 系统中,当执行一个在 Windows 或 DOS 系统修改郭的 sh 脚本文件,,可能会报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录 ,如下所示:

在这里插入图片描述

这是因为 Windows 和 Linux 系统对文本文件的换行符有不同的约定:

  • Windows 使用 回车(CR,十六进制是0xD) + 换行(LF,十六进制是0xA)组合(\r\n);
  • Linux 只使用 换行(LF,十六进制是0xA)

^M0xD 在 Vim 中的显示,0x0D = 13,M是英语中的第 13 个字符。

1.vim查看^M

方式一:查看^M【推荐】

vim 中查看 ^M 命令:

:e ++ff=unix %

在这里插入图片描述

方式二:查看文件格式

我们也可以通过查看文件格式进行判断,执行如下命令:

:set ff?
  • 如果显示为 fileformat=dos,则说明这是一个以 DOS/Windows 格式保存的文件。

在这里插入图片描述

方式三:使用 cat 命令

如果文件内容不多的情况下,我们可以使用如下 cat 命令来查看 ^M 字符。

在这里插入图片描述


2.vim删除^M

方式一:手动删除

我们前面通过方式一执行 :e ++ff=unix % 已经查看到了 ^M,符号,通过 i 编辑文本文件,删除 ^M 之后,:wq 保存并退出即可。

(注意:^M 看似两个字符,其实是一个字符,按一次删除按钮即可。)

在这里插入图片描述

方式二:批量替换

如果文件内容较多,通过 :e ++ff=unix % 查看 ^M 之后,手动删除会比较耗费时间,我们可以执行如下命令来进行批量删除:

:%s/\r//g

或者也可以这样:(注意:命令中 ^M 的输入方式是 Ctrl + V,然后 Ctrl + M

补充:MobaXterm 终端工具中 Ctrl + M,已经被占用了,需要在 Settings -> Keyboard shortcuts 中换一下。

:%s/^M//g

在这里插入图片描述

方式三:修改文件格式

前面1.vim查看^M 中已经介绍过,我们可以通过 :set ff? 查看文件格式,那么我们也可以通过直接修改文件格式的方式来删除 ^M 字符。

:set ff=unix

下面为完整写法:

:set fileformat=unix

在这里插入图片描述

再次使用 set ff? 命令查看文件格式已经被修改为 unix

在这里插入图片描述

脚本文件可以正常执行了:

在这里插入图片描述

方式四:dos2unix 命令【推荐】

直接执行 dos2unix 文件名 可以将文件转为 unix 版本,删除里面所有的 ^M

dos2unix 

在这里插入图片描述

整理完毕,完结撒花~ 🌻





参考地址:

1.史上最全的Vim命令,https://blog.csdn.net/scaleqiao/article/details/45153379

2.Linux下去掉^M的四种方法,https://blog.csdn.net/u012678323/article/details/132741008

<think>嗯,用户之前问的是关于Linux中sed命令的用法,现在他们转向了Vim中的替换命令。看起来他们可能是在学习文本处理工具,想深入了解不同的编辑器或工具之间的相似和不同之处。用户提供的引用内容是关于Vim替换操作的,但需要结合之前的对话来确保回答的一致性。 首先,我需要确认用户的需求是详细了解Vim的替换命令,包括语法、选项和示例。之前的回答中,我详细解析了sed的使用,所以现在需要以类似的结构来组织Vim的替换命令,保持结构清晰,方便用户对比学习。 用户给的引用[1]里提到了Vim的替换命令,比如:s、全局替换、行范围替换、分隔符替换等。需要将这些内容整合到回答中,但要注意引用标识的正确使用,比如[^1]。同时,用户可能希望看到具体的示例,以及如何处理特殊字符的情况,比如路径中的斜杠。 接下来,我需要确定回答的结构。可能分为基础语法、核心功能、高级技巧和注意事项几个部分。基础语法部分需要解释基本的替换命令格式,核心功能包括行范围、全局替换、修饰符等,高级技巧可以涉及正则表达式、分组捕获、使用其他分隔符等。注意事项则要提醒用户备份文件、处理特殊字符等。 另外,用户之前的问题中提到了生成相关问题,所以需要确保在最后添加相关问题,帮助用户进一步学习。例如,如何跨文件替换,或者如何结合正则表达式进行复杂替换。 需要注意的是,用户可能对Vim和sed的区别感兴趣,但当前问题集中在Vim本身,所以重点应放在Vim的替换命令上。同时,要避免重复之前关于sed的内容,除非有直接的对比点。 最后,要确保使用正确的中文表达,保持示例的简洁和实用,引用提供的参考资料中的内容,比如替换分隔符和使用+号作为分隔符的例子,正确标注引用[^1]。</think>以下是对$vim$替换命令的深度解析,包含基础语法、核心功能和高级技巧,结合典型场景示例: --- ### 一、基础语法结构 `:s/原模式/新内容/[修饰符]` 是核心替换命令模板,支持正则表达式和范围限定[^1] #### 标准替换流程 ```vim :[范围]s/[选项]/原模式/新内容/[修饰符] ``` --- ### 二、核心功能详解 #### 1. 行范围控制 | 范围表达式 | 作用示例 | |---------|--------| | `:n` | 仅第n行(如`:5s/old/new/`)| | `:n,m` | n到m行(如`:3,7s/old/new/g`)| | `:.` | 当前行(等同`:[当前行号]s/...`)| | `:$` | 最后一行(如`:$s/$/END/`追加内容)| | `:%` | 整个文件(如`:%s/\s\+$//g`删除行尾空格)| #### 2. 全局替换修饰符 - `g`:替换行内所有匹配项(默认只替换第一个) ```vim :%s/foo/bar/g " 全文替换所有foo为bar[^1] ``` - `i`:忽略大小写(如`:s/FOO/bar/gi`) - `c`:每次替换前确认(交互式操作) ```vim :%s/error/warning/gc " 替换前显示[Y/n/a/q/l]选项 ``` #### 3. 特殊符号处理 - 路径中的`/`可用其他符号代替: ```vim :s#/old/path#/new/path# " 使用#作为分隔符[^1] :s+/usr/local+/opt+ " 使用+作为分隔符 ``` --- ### 三、高级应用场景 #### 1. 正则表达式捕获 - 使用`\(...\)`分组和`\1`反向引用: ```vim :%s/\(20\)23/\124/g " 将"2023"替换为"2024" :%s/\(\d\+\)-\(\d\+\)/\2:\1/g " 交换日期格式(01-25 → 25:01) ``` #### 2. 组合命令操作 ```vim " 先删除空行再替换内容 :%s/^$//g | %s/DEBUG/INFO/g ``` #### 3. 特殊字符转义 - 处理含`/`或`&`的文本: ```vim :s/\/dir\/file/\&backup/g " 匹配/dir/file替换为&backup :s@http://example.com@https://new.site@ " 使用@避免转义 ``` --- ### 四、综合示例演示 #### 示例1:批量注释代码 ```vim :1,10s/^/#/ " 在1-10行首添加#注释 :.,+5s/^/\/\// " 当前行及后5行添加//注释 ``` #### 示例2:数据格式转换 ```vim " CSV转TSV格式(保留原文件: w newfile.txt) :%s/,/\t/g ``` #### 示例3:带条件的替换 ```vim " 仅在包含"ERROR"的行中替换日期格式 :g/ERROR/s/2023/2024/g ``` --- ### 五、操作安全建议 1. **强制备份**:`:w oldfile.bak` 执行高危操作前保存副本 2. **预览模式**:替换时先不加`g`修饰符测试效果 3. **撤销操作**:替换后立即使用`u`撤销错误修改 --- ### 六、性能优化技巧 1. 优先使用具体行范围(避免全文扫描) 2. 复杂正则表达式用`\v`启用very magic模式(减少转义) 3. 大文件处理时关闭语法高亮(`:syn off`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿放下技术的小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值