Linux vi/vim 详解(进阶篇)
《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 日志分析与排错技巧》🔍
请告诉我你想深入的方向吧!🚀

浙公网安备 33010602011771号