强悍的 vim —— 删除空行、删除注释以及加注释解注释

本文介绍了一系列在文本编辑过程中常用的技巧,包括如何使用正则表达式来删除空行、注释行,以及如何添加和删除注释等操作。这些技巧对于提高文本处理效率非常有用。

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

1. 删除空行

空行的构成比较复杂

  • (1)删除没有内容的空白行

    :g/^$/d
  • (2)删除包含空格(%s)的空白行

    :g/^%s*$/d

2. 删除注释

:%s/^#.*$//g

如果某些行以若干空格开始,并以换行结束:

:%s/^[ ]*#.*\n//g

3. 删除以//开头的注释

$ cat test.txt | grep -v '//' >> test2.txt

4. 加注释

其实就是替换:

:s/^/#/
:s/^/#/g

末尾的g可加可不加

  • :s/<from>/<to> = substitude across entire document replacing <from> with <to>(只对每一行的第一个进行修改)

  • :s/<from>/<to>/g = substitute every occurence on line rather than just first

5. 解注释

:s/^#//g

^#:表示开头为 # 号;

<think>好的,用户问的是怎么批量注释Shell脚本。首先,我需要回想一下常见的几种方法。用户之前已经问过格式化工具,可能对Shell脚本有一定的了,但这次的问题更具体,是关于注释的批量处理。 首先,我应该考虑用户可能的场景。他们可能有一个比较长的脚本,需要快速注释掉多行,或者暂时禁用某些部分进行调试。这时候手动一行行#号显然效率低,尤其是处理大量代码的时候。 接下来,我需要列举不同的方法。常见的有使用sed命令,这应该是最直接的方法,用正则表达式在行首添#号。还有使用Vim或Emacs这样的编辑器,通过块选择功能来批量注释,这对习惯使用编辑器的用户来说很方便。另外,也可以写一个简单的Shell脚本来自动处理,比如逐行添注释符。 然后,可能还有用户想临时注释一段代码,这时候可以使用Here Document或者条件判断来达到效果。比如用if false包裹代码块,或者用: << 'COMMENT' ... COMMENT的结构,这样代码虽然存在,但不会执行。这种方法在临时调试时很有用。 另外,用户可能关心如何取消注释,所以每个方法都应该提到对应的撤销步骤。比如用sed添注释后,可以用sed再次删除行首的#号来取消注释。 还需要考虑不同用户的技能水平。有些用户可能熟悉命令行工具,喜欢用sed或awk,而有些用户可能更倾向于使用他们熟悉的编辑器,比如Vim或VS Code。所以需要分点说明不同方法的适用情况,并给出具体的命令示例,方便用户直接复制使用。 用户可能没有提到的深层需求是,他们可能需要在团队协作中保持代码规范,或者集成到自动化流程中,比如用Git钩子在提交前自动处理注释。不过这个问题主要集中在批量注释的方法上,可能暂时不需要扩展到自动化流程,但可以稍微提一下,作为额外信息。 最后,总结部分要对比不同方法的优缺点,帮助用户根据具体情况选择合适的方式。比如,sed命令适合快速处理,而编辑器方法适合交互式操作,Here Document适合临时注释大段代码。这样用户可以根据自己的需求和熟悉程度选择最合适的方法。</think>以下是批量注释 Shell 脚本的多种方法,可根据场景选择使用: --- ### 一、使用 `sed` 命令(命令行直接操作) #### 1. **注释指定行范围** ```bash # 注释第5~10行 sed -i '5,10 s/^/# /' script.sh # 取消注释删除行首的 # 和空格) sed -i '5,10 s/^# //' script.sh ``` #### 2. **注释匹配特定内容的行** ```bash # 注释所有包含 "echo" 的行 sed -i '/echo/s/^/# /' script.sh # 取消注释(反向操作) sed -i '/echo/s/^# //' script.sh ``` --- ### 二、使用 `vim` 编辑器(交互式操作) #### 1. **块选择模式** 1. 打开文件:`vim script.sh` 2. 进入 **VISUAL BLOCK** 模式:`Ctrl + V` 3. 用方向键选择要注释的行范围 4. 输入 `I`(大写i),输入 `# `,按 `Esc` 生效 #### 2. **取消块注释** 1. 同样用 `Ctrl + V` 选择注释符号 `#` 2. 按 `d` 删除选中内容 --- ### 三、通过 Shell 脚本自动化 #### 1. **逐行添注释** ```bash #!/bin/bash # 注释第3~7行 start=3 end=7 sed -i "${start},${end}s/^/# /" script.sh ``` #### 2. **按函数注释** ```bash # 注释某个函数(假设函数名为 my_function) sed -i '/^my_function() {/,/^}/ s/^/# /' script.sh ``` --- ### 四、使用 `awk` 工具 #### 1. **注释特定条件行** ```bash # 注释所有长度超过80字符的行 awk 'length > 80 {$0 = "# " $0} 1' script.sh > tmp && mv tmp script.sh ``` #### 2. **注释空行以外的内容** ```bash # 注释所有非空行 awk '!/^$/ {$0 = "# " $0} 1' script.sh > tmp && mv tmp script.sh ``` --- ### 五、临时注释技巧(不修改源文件) #### 1. **Here Document 临时屏蔽** ```bash : << 'COMMENT' 要注释的代码块 echo "这不会执行" COMMENT ``` #### 2. **条件判断法** ```bash if false; then 被注释的代码 echo "这不会执行" fi ``` --- ### 六、编辑器扩展方法 #### 1. **VS Code** - 快捷键选择多行:`Shift + Alt + 方向键` - 按 `Ctrl + /` 批量注释/取消注释 #### 2. **Sublime Text** - 选择多行后按 `Ctrl + /` - 支持嵌套注释(Shell/Python等) --- ### 方法对比表 | **方法** | **适用场景** | **优点** | **缺点** | |----------------|----------------------------|------------------------------|------------------------| | `sed` | 精确行号/模式匹配注释 | 无需打开文件,适合脚本自动化 | 需要熟悉正则表达式 | | Vim 块选择 | 交互式可视化操作 | 直观可控 | 依赖Vim技能 | | Here Document | 临时调试大段代码 | 不修改源文件结构 | 可能破坏原有缩进格式 | | 编辑器快捷键 | 日常快速注释 | 零学习成本 | 仅适合小范围操作 | --- ### 注意事项 1. **备份文件**:建议先执行 `cp script.sh script.sh.bak` 2. **缩进兼容性**:若原代码有缩进,注释符 `#` 应在行首(例如 `# echo "test"`) 3. **嵌套注释**:Shell **不支持嵌套注释**,已注释的代码再次注释会导致语法错误
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

五道口纳什

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

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

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

打赏作者

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

抵扣说明:

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

余额充值