如何在Vim中批量删除所有行里冒号至行尾的内容?
Vim批量删除行内从
:到行尾的方法 以下是几种无需重复单行操作的批量处理方案:
1. 全局替换命令(最快捷)
直接用Vim的全局替换功能一次性处理所有行:
:%s/:.*//
%表示作用于所有行s/:.*//是替换规则:匹配从:开始到行尾的所有字符(.*表示任意字符任意次数),替换为空字符串- 如果只想处理当前选中的行,先进入可视化模式选中目标行,再执行
:'<,'>s/:.*//
2. 可视化选中+批量执行单行操作
先选中需要处理的行,再统一执行你熟悉的f:d$操作:
- 按
ggVG选中全部行(也可以用v/V模式选特定行) - 按
:进入命令行,此时会自动出现'<,'>表示选中的范围 - 输入
normal f:d$并回车:
:'<,'>normal f:d$
normal命令会让Vim在选中的每一行执行后面的普通模式操作,相当于给每行自动跑一遍f:d$
3. 宏录制+批量回放
适合需要复用操作逻辑的场景,用来批量执行单行操作:
- 光标定位到第一行开头
- 按
qa开始录制宏(a是宏的寄存器名称,也可以用其他字母) - 执行单行操作
f:d$,再按j跳到下一行 - 按
q停止录制 - 按
@a执行一次宏(处理下一行),按@@重复上次宏操作;如果要处理所有剩余行,输入999@a(数字足够大即可,Vim会自动在最后一行停止)
内容的提问来源于stack exchange,提问作者Tabataba
相关产品推荐
相关产品推荐

