Vim 编辑器教程
第一部分:入门篇
Vim 是一个强大的文本编辑器,几乎所有 Linux/Unix 系统都预装了它。掌握 Vim 能让你在服务器环境、终端中高效编辑文件。
1. 启动与退出 Vim
vim 文件名 # 打开或创建文件
vim # 打开 Vim(稍后用 :e 文件名 打开文件)
退出命令(在命令模式下输入):
| 命令 | 说明 |
|---|
:w | 保存文件 |
:q | 退出 Vim |
:wq | 保存并退出 |
:q! | 强制退出,不保存修改 |
ZZ | 等同于 :wq(保存并退出) |
2. 两种核心模式
Vim 的核心是两种模式的切换:
- 命令模式(Normal Mode):按键盘执行命令(移动、删除、复制等)
- 插入模式(Insert Mode):像普通编辑器一样输入文字
模式切换:
| 操作 | 说明 |
|---|
i | 进入插入模式(在光标当前位置开始输入) |
Esc | 退出插入模式,回到命令模式 |
提示:不确定当前在哪个模式时,多按几次 Esc 总能回到命令模式。
3. 常用快捷键速查
移动光标(命令模式)
| 按键 | 说明 |
|---|
h j k l | 左、下、上、右(也可用方向键) |
w | 跳到下一个单词开头 |
b | 跳到上一个单词开头 |
0 | 跳到行首 |
$ | 跳到行尾 |
gg | 跳到文件第一行 |
G | 跳到文件最后一行 |
行号G | 跳到指定行(如 50G 跳到第50行) |
进入插入模式
| 按键 | 说明 |
|---|
i | 在光标前插入 |
a | 在光标后插入 |
o | 在当前行下方新建一行并插入 |
O | 在当前行上方新建一行并插入 |
I | 在行首插入 |
A | 在行尾插入 |
删除操作
| 按键 | 说明 |
|---|
x | 删除光标所在的字符 |
dd | 删除(剪切)当前行 |
数字dd | 删除多行(如 5dd 删除5行) |
dw | 删除一个单词 |
d$ | 删除到行尾 |
d0 | 删除到行首 |
复制粘贴
| 按键 | 说明 |
|---|
yy | 复制当前行 |
数字yy | 复制多行(如 3yy 复制3行) |
yw | 复制一个单词 |
p | 在光标下方粘贴 |
P | 在光标上方粘贴 |
撤销与重做
| 按键 | 说明 |
|---|
u | 撤销上一步操作 |
Ctrl + r | 重做(撤销的撤销) |
搜索
| 按键 | 说明 |
|---|
/关键词 | 向下搜索(如 /hello) |
?关键词 | 向上搜索 |
n | 跳到下一个匹配 |
N | 跳到上一个匹配 |
替换
| 命令 | 说明 |
|---|
:s/旧/新/g | 替换当前行所有匹配 |
:%s/旧/新/g | 替换全文所有匹配 |
:%s/旧/新/gc | 替换全文,每次替换前确认 |
4. 入门实战流程
场景:编辑一个配置文件
# 1. 打开文件
vim config.conf
# 2. 进入插入模式,修改内容
按 i
# 3. 编辑完毕,回到命令模式
按 Esc
# 4. 保存退出
:wq
第二部分:进阶补充篇
1. Vim 的三种模式详解
Vim 实际上有三种主要模式:
| 模式 | 说明 |
|---|
| 命令模式(Normal Mode) | 默认模式,执行各种命令 |
| 插入模式(Insert Mode) | 输入文本内容 |
| 命令行模式(Command-Line Mode) | 执行更复杂的命令(以 : 开头) |
切换方式:
- 命令模式 → 插入模式:按
i、a、o 等
- 命令模式 → 命令行模式:按
:
- 任何模式 → 命令模式:按
Esc
2. 进阶光标移动
行内移动
| 按键 | 说明 |
|---|
f + 字符 | 跳到当前行下一个指定字符(如 fa 跳到下一个 a) |
F + 字符 | 跳到当前行上一个指定字符 |
t + 字符 | 跳到指定字符前一个位置 |
; | 重复上一次 f/F/t 操作 |
% | 跳到匹配的括号((){}[]) |
屏幕移动
| 按键 | 说明 |
|---|
Ctrl + f | 向下翻一页(Page Down) |
Ctrl + b | 向上翻一页(Page Up) |
Ctrl + d | 向下翻半页 |
Ctrl + u | 向上翻半页 |
H | 跳到屏幕顶部 |
M | 跳到屏幕中部 |
L | 跳到屏幕底部 |
zz | 将当前行置于屏幕中央 |
文件跳转
| 按键 | 说明 |
|---|
gg | 跳到文件第一行 |
G | 跳到文件最后一行 |
数字G | 跳到指定行(如 100G) |
:数字 | 跳到指定行(如 :100) |
Ctrl + o | 返回上一次光标位置 |
Ctrl + i | 前进到下一次光标位置 |
gf | 跳转到光标下的文件路径 |
3. 进阶编辑操作
组合命令(动词 + 范围)
Vim 的命令遵循 动词 + 范围 的模式:
d + 范围 = 删除指定范围
y + 范围 = 复制指定范围
c + 范围 = 删除并进入插入模式
常用范围:
| 范围 | 说明 |
|---|
w | 一个单词 |
$ | 到行尾 |
0 | 到行首 |
gg | 到文件开头 |
G | 到文件结尾 |
iw | 内部单词(不含空格) |
aw | 一个单词(含空格) |
i" | 双引号内部内容 |
i( | 括号内部内容 |
it | HTML标签内部内容 |
示例:
dw — 删除一个单词
d$ 或 D — 删除到行尾
yiw — 复制光标所在的单词
ci" — 删除双引号内内容并进入插入模式
di( — 删除括号内内容
dit — 删除HTML标签内内容
快速修改
| 按键 | 说明 |
|---|
cw | 删除单词并进入插入模式 |
cc | 删除整行并进入插入模式 |
C | 删除到行尾并进入插入模式 |
s | 删除字符并进入插入模式 |
S | 删除整行并进入插入模式 |
r + 字符 | 替换光标下的字符 |
R | 进入替换模式(持续替换) |
~ | 切换大小写 |
gu | 转小写(如 guw 当前单词转小写) |
gU | 转大写(如 gUw 当前单词转大写) |
重复操作
| 按键 | 说明 |
|---|
. | 重复上一次编辑操作(非常强大!) |
数字 + 命令 | 重复命令多次(如 5dd 删除5行) |
4. 可视模式(Visual Mode)
可视模式用于选择文本,然后执行操作。
| 按键 | 说明 |
|---|
v | 字符可视模式(按字符选择) |
V | 行可视模式(按行选择) |
Ctrl + v | 块可视模式(按矩形选择) |
使用流程:
- 按
v 进入可视模式
- 用移动键选择文本
- 执行操作:
d 删除、y 复制、c 修改等
块选择实用技巧:
# 批量注释(在行首添加 #):
1. Ctrl + v 进入块选择
2. 选择多行的行首
3. 按 I 进入插入模式
4. 输入 #
5. 按 Esc
# 批量取消注释:
1. Ctrl + v 进入块选择
2. 选择注释符号
3. 按 d 删除
5. 寄存器与剪贴板
Vim 使用寄存器存储复制/删除的内容。
| 操作 | 说明 |
|---|
"ayy | 复制当前行到寄存器 a |
"ap | 粘贴寄存器 a 的内容 |
"0p | 粘贴上一次复制的内容(而非删除) |
:reg | 查看所有寄存器内容 |
"+y | 复制到系统剪贴板(需 Vim 支持) |
"+p | 从系统剪贴板粘贴 |
6. 多文件编辑
标签页
| 命令 | 说明 |
|---|
:tabnew 文件名 | 在新标签页打开文件 |
gt | 切换到下一个标签 |
gT | 切换到上一个标签 |
:tabclose | 关闭当前标签 |
分屏
| 命令 | 说明 |
|---|
:sp 文件名 | 水平分屏打开文件 |
:vsp 文件名 | 垂直分屏打开文件 |
Ctrl + w + h/j/k/l | 在分屏间移动 |
Ctrl + w + = | 平分窗口大小 |
Ctrl + w + _ | 最大化当前窗口高度 |
Ctrl + w + | | 最大化当前窗口宽度 |
:close | 关闭当前窗口 |
:only | 关闭其他所有窗口 |
缓冲区
| 命令 | 说明 |
|---|
:e 文件名 | 打开新文件 |
:buffers 或 :ls | 列出所有打开的缓冲区 |
:bn | 切换到下一个缓冲区 |
:bp | 切换到上一个缓冲区 |
:b数字 | 切换到指定编号的缓冲区 |
:bd | 关闭当前缓冲区 |
7. 宏录制
宏可以录制一系列操作并重复执行。
| 按键 | 说明 |
|---|
qa | 开始录制宏到寄存器 a |
q | 停止录制 |
@a | 执行寄存器 a 的宏 |
@@ | 重复上一次执行的宏 |
数字@a | 执行宏多次(如 10@a) |
示例:给10行文本添加引号
qa # 开始录制到 a
I" # 行首插入引号
Esc # 回到命令模式
A" # 行尾添加引号
Esc # 回到命令模式
j # 移到下一行
q # 停止录制
9@a # 对接下来9行执行同样的操作
8. 实用命令行命令
| 命令 | 说明 |
|---|
:r 文件名 | 将文件内容插入到光标下方 |
:!命令 | 执行外部命令(如 :!ls) |
:r !命令 | 将外部命令输出插入到文件 |
:w 文件名 | 另存为新文件 |
:n1,n2w 文件名 | 将指定行范围保存到新文件 |
:set nu | 显示行号 |
:set nonu | 隐藏行号 |
:set relativenumber | 显示相对行号 |
:set list | 显示隐藏字符(Tab、行尾等) |
:nohlsearch | 取消搜索高亮 |
9. 常用配置(写入 ~/.vimrc)
" 基础设置
set number " 显示行号
set relativenumber " 显示相对行号
set tabstop=4 " Tab 显示为4个空格
set shiftwidth=4 " 缩进宽度为4
set expandtab " Tab 转为空格
set autoindent " 自动缩进
set smartindent " 智能缩进
set hlsearch " 搜索高亮
set incsearch " 增量搜索
set ignorecase " 搜索忽略大小写
set smartcase " 有大写时区分大小写
set cursorline " 高亮当前行
set showmatch " 显示匹配的括号
set encoding=utf-8 " 编码设置
set fileencoding=utf-8 " 文件编码
set wildmenu " 命令行补全菜单
syntax on " 语法高亮
filetype plugin indent on " 文件类型检测
" 快捷键映射
let mapleader="," " 设置 Leader 键为逗号
nmap <Leader>w :w<CR> " ,w 保存
nmap <Leader>q :q<CR> " ,q 退出
10. 常用场景速查
编辑配置文件
vim /etc/nginx/nginx.conf
# 修改后 :wq 保存退出
快速查看文件
vim file.txt
# 查看后 :q 退出
替换文件中的字符串
vim file.txt
:%s/旧字符串/新字符串/g
:wq
批量注释代码
Ctrl + v → 选择行 → I → 输入 # → Esc
批量取消注释
Ctrl + v → 选择 # → d
撤销所有修改
:q! # 不保存强制退出
11. 速查卡片
┌─────────────────────────────────────────────────────────┐
│ Vim 速查表 │
├─────────────────────────────────────────────────────────┤
│ 模式切换 i=插入 Esc=命令 :=命令行 │
│ 退出 :wq=保存退出 :q!=强制退出 ZZ=保存退出 │
│ 移动 hjkl=方向 w/b=单词 0/$=行首尾 gg/G=首尾 │
│ 编辑 x=删字符 dd=删行 yy=复制 p=粘贴 u=撤销 │
│ 搜索 /关键词=向下 ?关键词=向上 n/N=下一个/上一个│
│ 替换 :%s/旧/新/g=全局替换 │
│ 可视 v=字符选择 V=行选择 Ctrl+v=块选择 │
│ 重复 .=重复上一次操作 数字+命令=重复多次 │
└─────────────────────────────────────────────────────────┘