HoRain云--Vim多行删除:8种高效技巧全解析
·

🎬 HoRain 云小助手:个人主页
⛺️生活的理想,就是为了理想的生活!
⛳️ 推荐
前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。
目录

掌握Vim多行删除是高效文本编辑的核心技能。我将从基础到高级,系统讲解8种删除多行的实用方法。
📊 多行删除方法速查表
|
方法 |
命令 |
适用场景 |
特点 |
|---|---|---|---|
|
单行删除 |
|
删除当前行 |
最基础 |
|
多行删除 |
|
删除n行 |
指定行数 |
|
范围删除 |
|
删除m到n行 |
精确范围 |
|
可视模式 |
|
可视化选择删除 |
直观灵活 |
|
模式匹配 |
|
删除匹配行 |
批量处理 |
|
反向删除 |
|
保留匹配行 |
反向选择 |
|
删除到标记 |
|
删除到标记a |
快速导航 |
|
删除段落 |
|
删除段落 |
语义操作 |
🔧 8种核心删除方法详解
方法1:基础删除命令
单行删除
dd " 删除当前行(实际是剪切,可粘贴)
3dd " 删除当前行及后续2行(共3行)
删除到行尾/行首
D " 删除从光标到行尾的内容(相当于 d$)
d0 " 删除从光标到行首的内容
d^ " 删除从光标到第一个非空字符
方法2:范围删除(最常用)
绝对行号删除
:10,20d " 删除第10到20行
:.,$d " 删除从当前行到文件末尾
:1,.d " 删除从第1行到当前行
:%d " 删除整个文件(清空)
相对行号删除
:.,+5d " 删除当前行及后面5行
:.,-3d " 删除当前行及前面3行
:10,+10d " 删除第10行及后面10行
使用标记删除
ma " 在当前行设置标记a(标记可以是a-z)
:'a,'bd " 删除从标记a到标记b之间的行
:'a,.d " 删除从标记a到当前行
方法3:可视模式删除(直观选择)
进入可视模式
v " 字符可视模式(按字符选择)
V " 行可视模式(按行选择,最常用)
Ctrl+v " 块可视模式(矩形选择)
可视模式操作流程
V " 进入行可视模式
jjjj " 向下选择4行(或使用 4j)
d " 删除选中的行
块删除示例
Ctrl+v " 进入块可视模式
jjjj " 向下选择4行
llll " 向右选择4列
d " 删除选中的块
方法4:模式匹配删除(批量处理)
删除包含特定模式的行
:g/error/d " 删除所有包含"error"的行
:g/^#/d " 删除所有以#开头的行(注释)
:g/^\s*$/d " 删除所有空行(包括空格组成的行)
:g/pattern/d | echo "Done" " 删除后显示消息
删除不包含模式的行(反向删除)
:v/important/d " 删除所有不包含"important"的行
:g!/TODO/d " 同上,删除所有不包含"TODO"的行
组合条件删除
:g/error/.,+2d " 删除包含"error"的行及后面2行
:g/start/,/end/d " 删除从包含"start"到包含"end"的所有行
方法5:文本对象删除(语义化操作)
删除单词
dw " 删除从光标到下一个单词开头
de " 删除从光标到当前单词末尾
daw " 删除整个单词(包括周围空格)
diw " 删除单词内部(不包括周围空格)
删除句子和段落
das " 删除整个句子
dis " 删除句子内部
dap " 删除整个段落(包括空行)
dip " 删除段落内部(不包括周围空行)
删除引号/括号内容
di" " 删除双引号内的内容(不包括引号)
da" " 删除双引号及内容
di( " 删除圆括号内的内容
da( " 删除圆括号及内容
di{ " 删除花括号内的内容
da{ " 删除花括号及内容
di[ " 删除方括号内的内容
da[ " 删除方括号及内容
方法6:高级组合技巧
删除到字符
dtx " 删除从光标到下一个x字符(不包括x)
dfx " 删除从光标到下一个x字符(包括x)
删除到行号
d10G " 删除从当前行到第10行
dG " 删除从当前行到文件末尾
dgg " 删除从当前行到文件开头
删除到搜索位置
d/pattern " 删除从光标到pattern第一次出现的位置
d?pattern " 反向删除到pattern
方法7:寄存器操作(安全删除)
使用黑洞寄存器
"_dd " 删除当前行但不保存到寄存器(彻底删除)
"_dap " 删除整个段落但不保存
指定寄存器删除
"add " 删除当前行到寄存器a
"b5dd " 删除5行到寄存器b
查看寄存器内容
:reg " 查看所有寄存器内容
:reg a " 查看寄存器a的内容
方法8:宏和脚本批量删除
录制宏删除
qa " 开始录制宏到寄存器a
/error<CR> " 搜索error
dd " 删除当前行
q " 停止录制
@a " 执行宏
100@a " 执行宏100次
使用全局命令配合
:g/^#/normal dd " 删除所有以#开头的行
:g/pattern/normal dap " 删除所有包含pattern的段落
🎯 实战场景应用
场景1:清理配置文件注释
# 删除所有注释行(以#或//开头)
:g/^\s*#/d " 删除#注释
:g/^\s*\/\//d " 删除//注释
# 删除行尾注释
:%s/#.*$//g " 删除#及其后的内容
:%s/\/\/.*$//g " 删除//及其后的内容
场景2:清理日志文件
# 删除空行
:g/^\s*$/d
# 删除包含特定错误的行
:g/ERROR\|FATAL/d
# 删除时间戳范围
:g/2023-10-01/,/2023-10-02/d
# 保留包含特定关键词的行,删除其他
:v/important\|warning/d
场景3:处理代码文件
# 删除所有console.log
:g/console\.log/d
# 删除TODO注释
:g/\/\/\s*TODO/d
# 删除空函数
:g/{}/d
# 删除特定函数
:g/function test/,/^}/d
场景4:处理CSV/TSV数据
# 删除包含空值的行
:g/,,/d " CSV空值
:g/\t\t/d " TSV空值
# 删除前N行(表头)
:1,5d " 删除前5行
# 删除后N行(注释)
:-5,$d " 删除最后5行
⚙️ Vim配置优化
添加实用映射
" 在~/.vimrc中添加以下配置
" 快速删除到行尾(Ctrl+D)
nnoremap <C-d> D
" 快速删除当前行(Ctrl+X)
nnoremap <C-x> dd
" 删除当前单词(Alt+D)
nnoremap <M-d> daw
" 删除当前段落
nnoremap <leader>dp dap
" 删除所有尾随空格
nnoremap <leader>ds :%s/\s\+$//g<CR>
" 删除重复行
nnoremap <leader>dd :g/^\(.*\)$\n\1$/d<CR>
" 删除空行
nnoremap <leader>de :g/^\s*$/d<CR>
创建自定义命令
" 删除当前时间之后的行
command! -range=% DeleteAfterTime <line1>,<line2>g/^\d\{4\}-\d\{2\}-\d\{2\}/d
" 删除匹配模式的行并计数
command! -nargs=1 DeletePattern let cnt=0 | g/<args>/d | let cnt=cnt+1 | echo "Deleted " . cnt . " lines"
🔍 删除操作调试技巧
撤销与重做
u " 撤销上一次删除
Ctrl+r " 重做
U " 撤销当前行的所有修改
查看删除历史
:changes " 查看修改历史
:undolist " 查看撤销历史
g+ " 按时间向前跳转修改
g- " 按时间向后跳转修改
安全删除(先预览)
# 使用global命令预览
:g/pattern/p " 预览匹配的行
:g/pattern/# " 显示行号
# 确认后再删除
:g/pattern/d _ " 删除到黑洞寄存器(可撤销)
📈 性能优化建议
大文件删除优化
# 禁用语法高亮(加快处理速度)
:syn off
# 禁用折叠
:set nofoldenable
# 使用更高效的模式
:g/pattern/d " 比多次dd更快
# 分块处理大文件
:1,10000d " 先删除前10000行
:10001,20000d " 再删除下一块
内存优化
# 设置交换文件位置
:set directory=/tmp
# 增加撤销级别
:set undolevels=1000
# 禁用备份
:set nobackup
:set nowritebackup
💎 最佳实践总结
删除策略选择指南
|
场景 |
推荐方法 |
理由 |
|---|---|---|
|
少量连续行 |
|
快速直观 |
|
精确范围 |
|
精确控制 |
|
批量模式匹配 |
|
高效批量 |
|
保留特定内容 |
|
反向选择 |
|
代码块删除 |
|
语义化操作 |
|
安全删除 |
|
可恢复 |
|
大文件处理 |
分块删除 |
避免内存问题 |
安全操作黄金法则
-
先备份后操作
# 在终端中备份文件 cp file.txt file.txt.backup # 或在Vim中 :w file.txt.backup -
先预览再删除
:g/pattern/p " 先查看匹配行 :g/pattern/d " 确认后再删除 -
使用撤销保护
:set undofile " 启用持久撤销 :set undodir=~/.vim/undo " 设置撤销目录 -
重要删除前保存
:w " 删除前保存 :g/pattern/d :w " 删除后保存 -
使用寄存器恢复
"add " 删除到寄存器a "ap " 从寄存器a粘贴恢复
一键删除脚本示例
" 在~/.vimrc中添加实用函数
" 删除重复行(保留第一个)
function! DeleteDuplicateLines()
:sort u
endfunction
command! Ddup call DeleteDuplicateLines()
" 删除行尾空格
function! DeleteTrailingSpaces()
let l = line(".")
let c = col(".")
:%s/\s\+$//g
call cursor(l, c)
endfunction
command! Dtrail call DeleteTrailingSpaces()
" 删除空行(包括只有空格的行)
function! DeleteEmptyLines()
:g/^\s*$/d
endfunction
command! Dempty call DeleteEmptyLines()
" 删除当前函数
function! DeleteCurrentFunction()
normal! [[
normal! V][d
endfunction
command! Dfunc call DeleteCurrentFunction()
通过掌握这些多行删除技巧,您将能高效处理各种文本编辑任务。记住:先预览,后操作;先备份,后删除。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
更多推荐


所有评论(0)