《Linux vi/vim 详解(进阶篇)》
🎯 学习目标
掌握 vim 中的多行操作技巧,包括多行删除、复制、移动、缩进、注释等。
熟练使用可视模式(Visual Mode)进行高效文本编辑。
学会使用宏录制、批量替换、正则匹配替换等高级功能。
结合实际案例(如修改 Nginx 配置、调试 Shell 脚本),提升在阿里云 Ubuntu ECS 上的运维效率。
🧠 核心重点(表格提炼)
技巧
命令
应用场景
多行删除
dd, 5dd, dG, d}
删除一段代码或配置项
多行复制粘贴
yy, 5yy, "+y
拷贝代码块或日志内容
可视化选中
v, V, Ctrl + v
精准选择多行或多列
缩进与对齐
>, <, =, :set paste
修复代码格式
快速注释/取消注释
I# Esc, s/^/# /g
注释脚本或配置
批量替换
:%s/pattern/replacement/g
替换变量名、路径等
宏录制
qa, ..., q
自动化重复操作
正则表达式替换
:s/\v(pattern)/replacement/g
高级文本处理
🔍 详细讲解(进阶操作技巧)
1. 多行删除操作 🗑️
✅ 删除当前行及下方 5 行:
5dd
✅ 删除从当前行到文件末尾:
dG
✅ 删除从当前位置到段落结尾(以空行为分隔):
d}
📌 提示:
d 是删除命令,后面跟一个“范围”即可。
可配合 j 或 k 键组合,先定位再删除。
2. 多行复制与粘贴 📋
✅ 复制当前行及下方 5 行:
5yy
✅ 粘贴到下一行:
p
✅ 粘贴到上一行:
P
✅ 将内容复制到系统剪贴板(需支持):
"+y
📌 说明:
"+" 表示系统剪贴板寄存器。
可用于跨窗口复制内容,非常实用!
3. 可视化模式选中并操作 🖱️
✅ 字符级选中(逐字符):
v
✅ 行级选中(整行):
V
✅ 列块选中(按列选择):
Ctrl + v
✅ 示例:选中多行后添加前缀 # 注释:
进入列块模式:
Ctrl + v
选中你想插入的位置(例如每行开头)。
按 I(大写 i)进入插入模式。
输入 #。
按 Esc,所有选中的行都会被自动加上 #。
📌 提示:
列块模式非常适合处理 CSV 文件、日志、配置文件等需要对齐的内容。
4. 缩进与对齐 📐
✅ 向右缩进一行:
>
✅ 向左缩进一行:
<
✅ 自动格式化整个文件(适合代码):
gg=G
📌 解释:
gg 移动到第一行。
= 是格式化命令。
G 是最后一行。
组合起来就是“从头到尾格式化”。
✅ 开启粘贴模式(防止自动缩进干扰):
:set paste
📌 注意:
粘贴时建议开启该模式,避免粘贴内容被自动缩进打乱格式。
5. 快速注释/取消注释代码块 📝
✅ 使用可视化模式添加注释(适用于 shell/bash):
使用 V 选中多行。
按 I(大写 i)进入插入模式。
输入 #。
按 Esc,所有行都加上了注释。
✅ 使用正则表达式快速注释所有匹配行:
:%s/^/# /g
✅ 取消注释:
:%s/^# //
📌 说明:
^ 表示行首。
# 表示以 # 加空格开头。
适用于 Shell 脚本、Python 注释等。
6. 批量替换与正则匹配替换 🔍
✅ 全文替换某个字符串:
:%s/old_string/new_string/g
✅ 替换某几行(如第 10 到 20 行):
:10,20s/old/new/g
✅ 替换并确认每个结果:
:%s/old/new/gc
✅ 使用正则表达式(启用 \v 简化语法):
:s/\v(abc|def)/xyz/g
📌 常见正则符号:
符号
含义
.
任意字符
\d
数字
\w
单词字符
*
重复前一个字符 0 次或多次
+
重复前一个字符至少一次
()
分组
`
`
7. 宏录制自动化操作 🎬
宏可以记录你的一系列操作,并重复执行,非常适合重复性任务。
✅ 录制宏:
按 q 键开始录制。
输入一个寄存器名称(如 a):
qa
执行一系列操作,比如:
删除一行:dd
插入新内容:i ➝ 输入内容 ➝ Esc
再次按 q 停止录制。
✅ 回放宏:
@a
✅ 重复执行 10 次:
10@a
📌 用途:
清洗数据。
修改大量配置项。
自动生成测试数据。
8. 实战案例:ECS 上的 Vim 高效编辑实战 🛠️
场景一:修改 Nginx 配置,注释掉多个 server 块 🖥️
你在阿里云 Ubuntu ECS 上维护一个 Nginx 配置,想临时禁用几个虚拟主机配置。
✅ 操作如下:
打开配置文件:
sudo vim /etc/nginx/sites-available/default
使用 /server { 查找第一个 server 块。
按 V 进入行级可视模式。
按 } 往下扩展选择到下一个段落(假设是一个完整的 server 块)。
按 I 进入插入模式,输入 #,然后按 Esc。
📌 效果:
整个 server 块都被注释,Nginx 不会加载该配置。
场景二:Shell 脚本中变量名统一替换 🔄
你想将脚本中的变量名 VAR1 改为 NEW_VAR。
✅ 操作如下:
打开脚本:
vim script.sh
输入以下命令:
:%s/\bVAR1\b/NEW_VAR/g
📌 说明:
\b 是单词边界,确保只替换完整变量名,而不是 VAR123 的一部分。
场景三:清理日志文件中的无用信息 🧹
你想删除日志文件中所有包含 INFO 的行。
✅ 操作如下:
:g/INFO/d
📌 说明:
:g 是全局命令。
/INFO/ 匹配所有含 INFO 的行。
d 表示删除。
🧰 小贴士(进阶技巧)🔖
技巧
说明
:put = split('apple,banana,orange', ',')
在 Vim 中创建列表
:help pattern
查看正则表达式帮助
Ctrl + o / Ctrl + i
跳转历史位置
:registers
查看寄存器内容
:history
查看命令历史
:marks
查看标记点
:set filetype=sh
设置文件类型,启用语法高亮
:TOhtml
将当前缓冲区转换为 HTML 格式
📌 注意事项与安全建议
项目
建议
修改配置文件前务必备份
如 cp original.conf original.conf.bak
使用 sudo 编辑只读文件
如 sudo vim /etc/shadow
避免直接使用 vi(推荐 vim)
vim 支持更多特性
配置 .vimrc 提升体验
添加 set tabstop=4, syntax on, set number 等
使用 :recover 恢复崩溃文件
如果 vim 异常退出,可尝试恢复
定期清理 .swp 临时文件
防止因异常中断导致锁定提示
🧩 附录:.vimrc 推荐配置 💡
" 显示行号
set number
" 高亮搜索
set hlsearch
" 智能缩进
set smartindent
" 自动缩进
set autoindent
" 语法高亮
syntax on
" 鼠标支持
set mouse=a
" 状态栏显示当前文件名
set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%Y-%m-%d\ %H:%M\")}
" 设置默认编码
set encoding=utf-8
set fileencoding=utf-8
🎯 总结一句话:
“掌握 vim 的进阶技巧,就像拥有了一个智能编辑机器人🤖 —— 它能帮你完成复杂的文本处理、自动化操作、精准替换和结构优化,让你在 Linux 世界里如鱼得水🐟!”
是否继续下一章?我将继续输出:
《Shell 命令进阶与自动化脚本》🖥️
《Linux 权限管理与 ACL 详解》🔐
《Linux 日志分析与排错技巧》🔍
请告诉我你想深入的方向吧!🚀