vim 是 Linux 系统中功能最强大、最常用的文本编辑器,基于经典的 vi 编辑器扩展而来,支持多模式编辑 、语法高亮 、代码补全 、多窗口操作 等高级功能,尤其适合编辑代码、配置文件和日志。其核心特点是模式化操作(不同模式下快捷键和功能不同)
1. vim 的启动与退出
a. 启动 vim
bash
vim [文件名] # 打开指定文件(若文件不存在,保存时会创建)
vim # 直接启动 vim(无文件,需手动通过 [:w 文件名] 保存)
启动后默认进入命令模式(不可直接输入文本,需切换到输入模式)。
b. 退出 vim
退出需在命令模式 下执行(按 Esc 确保处于命令模式),常用退出命令:
| 命令 | 功能描述 |
|---|---|
:q |
退出(若文件未修改,直接退出) |
:q! |
强制退出(不保存修改,丢弃所有变更) |
:wq 或 ZZ |
保存并退出(ZZ 是命令模式快捷键,无需输入 :) |
:wq! |
强制保存并退出,是 root 用户要写入文件,但文件不允许写入,这样就还可以保存 |
:w |
保存文件(不退出,可继续编辑) |
2. vim 的核心模式
vim 有多种模式,核心是以下三种,模式切换是使用 vim 的基础:
| 模式 | 进入方式 | 功能描述 |
|---|---|---|
| 命令模式 | 启动 vim 默认进入;任何模式按 Esc 退回 |
执行快捷键命令(光标移动、删除、复制、粘贴等),不可直接输入文本。 |
| 输入模式 | 命令模式下按 i/a/o 等 |
可直接输入文本(类似记事本),按 Esc 退回命令模式。 |
| 末行模式 | 命令模式下按 : 进入 |
执行单行命令(保存、退出、查找替换、配置等),按 Enter 执行,按 Esc 退回命令模式。 |
a. 模式切换示意图:

b. 命令模式:核心操作
命令模式是 vim 的"操作中心",所有编辑操作(光标移动、删除、复制等)都在此模式下执行
i. 光标移动(精准定位)
| 快捷键 | 功能描述 | 等价方向键 |
|---|---|---|
h |
光标向左移动一个字符 | ← |
j |
光标向下移动一个字符 | ↓ |
k |
光标向上移动一个字符 | ↑ |
l |
光标向右移动一个字符 | → |
gg |
光标跳至文件首行 | - |
G |
光标跳至文件尾行 | - |
nG |
光标跳至第 n 行(如 5G 跳至第5行) |
- |
^ |
光标跳至当前行第一个非空字符(行首) | Home |
| $ | 光标跳至当前行末尾 | End |
w |
光标向右跳一个单词(到下一词首) | - |
b |
光标向左跳一个单词(到上一词首) | - |
Ctrl + f |
向下翻一页(Forward) | PageDown |
Ctrl + b |
向上翻一页(Backward) | PageUp |
ii. 文本编辑(删除、复制、粘贴、撤销)
(1)删除操作
| 快捷键 | 功能描述 |
|---|---|
x |
删除光标所在位置的字符(同 Delete) |
nx |
删除光标开始的 n 个字符(如 3x 删除3个字符) |
dw |
删除从光标开始的一个单词(包括空格) |
d$ |
删除从光标到当前行末尾的所有内容 |
d^ |
删除从光标到当前行开头的所有内容 |
dd |
删除当前行(常用!删除后可粘贴) |
ndd |
删除从当前行开始的 n 行(如 2dd 删除当前行+下一行) |
(2)复制与粘贴
| 快捷键 | 功能描述 |
|---|---|
yy |
复制当前行(常用) |
nyy |
复制从当前行开始的 n 行(如 3yy 复制3行) |
p |
将复制/删除的内容粘贴到光标下方(新行) |
P |
将复制/删除的内容粘贴到光标上方(新行) |
(3)撤销与重做
| 快捷键 | 功能描述 | 类似 Windows 操作 |
|---|---|---|
u |
撤销上一步操作(Undo) | Ctrl + Z |
Ctrl + r |
重做上一步被撤销的操作(Redo) | Ctrl + Y |
(4)替换字符
| 快捷键 | 功能描述 |
|---|---|
r |
替换光标所在位置的单个字符 (按 r 后输入新字符,直接替换) |
R |
进入替换模式 (从光标位置开始,输入的字符会覆盖后续字符,按 Esc 退出) |
iii. 查找与替换(命令模式快速操作)
(1)查找文本
- 命令模式下按
/关键词向下查找(从当前位置往后找); - 按
?关键词向上查找(从当前位置往前找); - 按
n跳至下一个 匹配项;按N跳至上一个匹配项; - 按
:noh取消查找高亮(避免屏幕混乱)。
示例:
bash
/error # 向下查找所有包含 "error" 的位置
?warning # 向上查找所有包含 "warning" 的位置
(2)快速替换(单行)
命令模式下按 cc 清空当前行并进入输入模式(快速重写一行);
按 S(大写)效果同 cc。
c. 输入模式:输入文本(基础)
输入模式用于直接输入文本,从命令模式进入输入模式的常用方式(区别在于光标位置):
| 快捷键 | 进入输入模式的位置 |
|---|---|
i |
在光标当前位置前插入 |
I |
在当前行第一个非空字符前插入(行首插入) |
a |
在光标当前位置后插入 |
A |
在当前行末尾插入 |
o |
在当前行下方新建一行并插入,如果当前行是注释会带上# |
O |
在当前行上方新建一行并插入,如果当前行是注释会带上# |
d. 末行模式:高级操作(命令行命令)
末行模式通过 : 进入,支持复杂命令(保存、查找替换、配置等),格式为 :命令 [参数]。
a. 保存与退出(基础)
bash
:w # 保存当前文件(不退出)
:w 文件名 # 另存为指定文件(如 :w new.txt)
:q # 退出(文件未修改时)
:q! # 强制退出(不保存)
:wq # 保存并退出(等价于 ZZ)
:wq! # 强制保存并退出
b. 全局查找替换(核心功能)
格式::[范围]s/原内容/新内容/[选项]
- 范围 :
- 不指定:仅替换当前行;
n,m:替换第n行到第m行(如1,5表示1-5行);%:替换所有行(全局替换);
- 选项 :
g:全局替换(一行内所有匹配都替换,默认只替换第一个);c:替换前确认 (每次替换会提示y/n,防止误操作);i:忽略大小写(如替换 "Error" 同时匹配 "error")。
示例:
bash
# 1. 替换当前行第一个 "old" 为 "new"
:s/old/new
# 2. 替换全局(所有行)所有 "old" 为 "new"
:%s/old/new/g
# 3. 替换第5-10行的 "hello" 为 "hi",且替换前确认
:5,10s/hello/hi/gc
# 4. 全局替换 "Error" 为 "Warning",忽略大小写
:%s/error/Warning/gi
c. 显示/隐藏行号
bash
:set nu # 显示行号(number 的缩写)
:set nonu # 隐藏行号
d. 分屏操作(多文件编辑)
bash
:split 文件名 # 水平分屏(上半部分显示当前文件,下半部分显示新文件)
:vsplit 文件名 # 垂直分屏(左半部分当前文件,右半部分新文件)
Ctrl + w + w # 切换分屏窗口(在命令模式下)
:q # 关闭当前分屏窗口
vim -o 1.txt 2.txt # 上下分屏
vim -O 1.txt 2.txt # 左右分屏
e. 指定字符替换
bash
:ab 自定义字符 长串字符 # 以后在输入模式输入自定义字符+回车会变成长字符串,如 :ab mymail 1083910359@qq.com
f. 其他实用命令
bash
:!命令 # 在 vim 中执行外部 Linux 命令(如 :!ls 查看当前目录文件,按 Enter 返回 vim)
:r 文件名 | !命令 # 导入内容到光标位置,比如 :r !date -R 把当前日期导入到当前位置
:set paste # 进入粘贴模式(解决复制粘贴时格式错乱问题,粘贴后用 :set nopaste 退出)
:help 关键词 # 查看 vim 帮助文档(如 :help dd 查看 dd 命令说明)
3. vim 配置:自定义编辑器(.vimrc)
通过修改用户家目录的 .vimrc 文件(若不存在则创建),可自定义 vim 行为(如默认显示行号、设置缩进等),提升使用体验。
常用配置示例(添加到 ~/.vimrc):
vim
set nu " 默认显示行号
set tabstop=4 " Tab 键宽度为4个空格
set shiftwidth=4 " 自动缩进宽度为4个空格
set autoindent " 自动缩进(新行与上一行对齐)
set expandtab " 将 Tab 转换为空格
set hlsearch " 查找结果高亮
set incsearch " 实时查找(输入时即时匹配)
syntax on " 开启语法高亮(不同文件类型显示不同颜色)
保存后,新启动的 vim 会自动应用这些配置。
4. 高频命令
| 场景需求 | 命令/快捷键 |
|---|---|
| 进入末行模式 | i(光标前插入)、a(光标后插入) |
| 退出末行模式 | Esc(退回命令模式) |
| 保存并退出 | :wq 或 ZZ(命令模式) |
| 强制退出(不保存) | :q!(末行模式) |
| 光标移动到行首/行尾 | ^ / $(命令模式) |
| 光标移动到文件首/尾 | gg / G(命令模式) |
| 删除当前行 | dd(命令模式) |
| 复制当前行并粘贴 | yy + p(命令模式) |
| 撤销操作 | u(命令模式) |
| 全局替换文本 | :%s/原内容/新内容/g(末行模式) |
5. .swap隐藏文件
当 vim 之后没有正常退出,而是直接 ctrl + z退出了,会产生一个 .swap 的文件,再次 vim 文件会是只读模式,可以通过以下方式解决
bash
ll -a # 查询隐藏文件,找到文件对应的 .swap 的隐藏文件
rm 隐藏文件 # 删除隐藏文件
vim 文件即可