vim删除空行、注释、换行符替换和重复行

本文介绍Vim编辑器的批量编辑技巧,包括删除特定行、替换换行符、删除特定字符后的所有内容、清除特殊字符及删除重复行的方法。适用于需要高效处理文本文件的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、删除空行

:g/^$/d

删除空行以及只有空格的行

:g/^\s*$/d

删除以 # 开头或 空格# 或 tab#开头的行

:g/^\s*#/d

对于 php.ini 配置文件,注释为 ; 开头

:g/^\s*;/d

删除从第二行到包含 bbs 的区间行

:2,/bbs/d

删除从包含 bbs 的行到最后一行区间的行

:/bbs/,$d

删除匹配 bbs 且前面只有一个字符的行

:g/.bbs/d

(phpstorm 批量删除空行 是^\n 替换为空)

二、gvim 换行符替换

用 VIM 编辑文本文件,想在每一行的换行之前,添加一个字符,比如 “;”。

想到替换命令:

:%s/\n/;\n/g

结果总是出错。

后来找到解决方案:

:%s/\n/;\r/g

有人总结的结论:

When searching: \n is newline, \r is CR (carriage return = Ctrl-M = ^M)

When replacing: \r is newline, \n is a null byte (0×00).

意思是:

字符串查找时,”\n” 是换行,”\r” 是回车,也就是经常会看到的 ^M(备注-1)。

字符串替换时,”\r” 是换行,’\n” 是空字符(0×00)。

三、gvim 删除每一行?后面的所有字符,包括?

在 Vim (或者相应的图形界面版本 gVim)中,你可以使用搜索和替换命令去删除每一行中的问号 `?` 及其后面的所有字符。Vim 中处理正则表达式时,某些字符拥有特殊含义,比如 `?` 在 Vim 正则表达式中通常表示前面的部分是可选的。

要修正这个错误并在 Vim 中执行这项操作,你需要正确地转义 `?` 符号,以便它被当作一个普通字符进行匹配。这里有几种方法可以处理这个问题,下面是常见的方法之一:

:%s/\?.*//g

在上面的命令中:

- `:%s` 是 Vim 中的替换命令,`%` 代表整个文件。
- `\?` 表示匹配字面上的 `?` 字符(反斜杠 `\` 用于转义 `?`)。
- `.*` 表示匹配问号 `?` 后的任何字符(`.` 表示任何单个字符,`*` 表示零个或多个前面的元素)。
- `//` 表示将匹配到的内容替换为空,也就是删除它。
- `g` 标志表示全局替换,作用于每一行中的所有匹配项。

在 gVim 中执行这个命令,你可以在命令模式中输入冒号 `:` 来开始命令,然后输入剩余的部分,并按 `Enter` 运行。

如果发现 `?` 没有被正确识别,那么可能是因为你启用了 "very magic" 模式,此时需要进一步转义。在非常罕见的情况下,如果遇到意料之外的行为,可以考虑使用以下命令:

:%s/\v\zs\?.*//g

在这个命令中,`\v` 表示 "very magic",使得正则表达式中只有字母、数字和下划线需要转义,其他特殊符号都按特殊含义处理。`\zs` 设置匹配开始的位置为紧跟其后的模式,这使得替换从 `?` 开始而非之前。这种情况下,`\?` 应无需转义。 这条命令在大多数情况下是不必要的,常规转义通常足以处理上述需求。

确保已经进入 gVim 的命令模式(通常是按下了 Esc 键),然后输入对应的命令并按 `Enter`。如果你依然遇到错误,请再次检查你的 Vim/gVim 配置和相关的语法。

四、清除所有 ^M 的替换命令

:%s/CTRL+V CTRL+M//g

就是 Control 键+V,然后再 Control 键 + M,就变成了 ^M,然后替换为空就可以了。

清除所有空格的命令

:%s/^\s*\n//g

:%s/CTRL+V CTRL+M//g:%s/CTRL+V CTRL+M//g:%s/CTRL+V CTRL+M//g

:%s/CTRL+V CTRL+M//g

五、删每一行引号后面的所有字符,引号前面不能有\,引号也要删掉,如果引号前面有\也要删掉

:%s/\([^\\]\)".*/\1/

解释:

  1. :%s/:表示在整个文件中进行替换操作。

  2. \([^\\]\)":匹配一个前面没有反斜杠的双引号。

    • \( ... \):捕获组,用于捕获双引号前面的字符。

    • [^\\]:匹配任何不是反斜杠的字符。

  3. .*:匹配双引号后面的所有字符。

  4. \1:替换为捕获组中的内容,即双引号前面的字符。

六、删除重复行

1):sort u  最简单的命令,使用该命令会对所有行进行排序,并只保留完全相同的行的第一行;它适用于无序重复行的情况,但要求重复行完全相同。

2)输入命令:

:g/^\(.*\)$\n\1$/d
  • :g/.../d:匹配符合条件的行并删除。

  • ^\(.*\)$:匹配整行内容并捕获。

  • \n\1$:匹配下一行是否与上一行相同。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

戴国进

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

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

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

打赏作者

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

抵扣说明:

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

余额充值