Vim 命令详解与技巧总结
Vim 是 Linux 环境中功能最强大的文本编辑器之一,其核心设计理念是模式化编辑------通过将编辑与导航分离,让双手无需离开键盘即可完成所有操作。本文从基础到进阶,系统梳理 Vim 的核心命令与实用技巧。
一、核心模式
Vim 启动后默认进入普通模式(Normal Mode) ,这是执行所有编辑命令的入口。理解并熟练切换以下四种模式是掌握 Vim 的关键:
| 模式 | 进入方式 | 用途 |
|---|---|---|
| 普通模式 | Esc(从任何模式返回) |
移动光标、删除、复制、粘贴、撤销等 |
| 插入模式 | i / a / o / I / A / O |
输入文本内容 |
| 可视模式 | v(字符)/ V(行)/ Ctrl+v(块) |
选择文本进行批量操作 |
| 命令行模式 | : |
执行保存、退出、搜索替换等命令 |
核心原则 :任何模式下按 Esc 都能回到普通模式。
二、基础操作
1. 光标移动
字符级移动:
-
h--- 左移一格 -
j--- 下移一行 -
k--- 上移一行 -
l--- 右移一格
单词级移动:
-
w--- 跳到下一个单词开头 -
b--- 回到上一个单词开头 -
e--- 跳到当前单词末尾 -
0--- 跳到行首 -
^--- 跳到行首第一个非空白字符 -
$--- 跳到行尾
文件级移动:
-
gg--- 跳到文件第一行 -
G--- 跳到文件最后一行 -
:n--- 跳转到第 n 行(如:10) -
Ctrl+f--- 向下翻一页 -
Ctrl+b--- 向上翻一页 -
Ctrl+d--- 向下翻半页 -
Ctrl+u--- 向上翻半页
2. 插入文本
| 命令 | 功能 |
|---|---|
i |
在光标前插入 |
a |
在光标后插入 |
I |
在行首插入 |
A |
在行尾插入 |
o |
在当前行下方新建一行 |
O |
在当前行上方新建一行 |
3. 删除、复制与粘贴
删除:
-
x--- 删除当前字符 -
dd--- 删除当前行 -
dw--- 删除一个单词 -
d$--- 删除从光标到行尾 -
D--- 同d$
复制:
-
yy--- 复制当前行 -
yw--- 复制一个单词 -
y$--- 复制从光标到行尾
粘贴:
-
p--- 粘贴到光标后 -
P--- 粘贴到光标前
4. 撤销与重做
-
u--- 撤销上一步操作 -
Ctrl+r--- 重做(撤销的逆操作)
5. 保存与退出
| 命令 | 功能 |
|---|---|
:w |
保存文件 |
:q |
退出(有修改时会提示) |
:wq 或 :x |
保存并退出 |
:q! |
强制退出,放弃修改 |
ZZ |
保存并退出(普通模式下) |
ZQ |
强制退出不保存 |
三、高效编辑技巧
1. 操作符 + 动作命令的组合
Vim 最强大的特性之一是组合命令 :将一个操作符与一个动作命令组合,形成强大的编辑原语--23。
常用操作符 :d(删除)、y(复制)、c(修改/删除并进入插入模式)、>(右缩进)、<(左缩进)、g~(切换大小写)。
组合示例:
-
d2w--- 删除 2 个单词 -
y3j--- 复制当前行及向下 3 行 -
cw--- 修改从光标到单词结尾(删除并进入插入模式) -
ciw--- 修改当前整个单词(change inner word) -
dap--- 删除整个段落 -
da"--- 删除双引号及其内容 -
yip--- 复制当前段落 -
>>--- 当前行右缩进 -
<<--- 当前行左缩进
2. 数字前缀(重复操作)
在命令前加数字可重复执行多次:
-
3j--- 向下移动 3 行 -
5w--- 向前跳转 5 个单词 -
10dd--- 删除 10 行 -
3p--- 粘贴 3 次-
3. 重复上一次操作
.(句号)--- 重复上一次编辑操作
4. 搜索与替换
搜索:
-
/pattern--- 向下搜索 pattern -
?pattern--- 向上搜索 pattern -
n--- 跳转到下一个匹配 -
N--- 跳转到上一个匹配 -
*--- 搜索光标下的单词(向下) -
#--- 搜索光标下的单词(向上)
替换:
-
:s/old/new--- 替换当前行第一个 old -
:s/old/new/g--- 替换当前行所有 old -
:%s/old/new/g--- 替换全文所有 old -
:%s/old/new/gc--- 全文替换,每次需确认
5. 可视模式批量操作
三种选择方式:
-
v--- 字符可视(精细选择) -
V--- 行可视(整行选择) -
Ctrl+v--- 块可视(列选择)
选中后可直接执行 d(删除)、y(复制)、>(缩进)等操作。
1. 批量插入(在相同列添加内容)
假设你想在第 3 列统一加一个逗号 ,:
-
将光标移动到第一行目标列的位置(比如第 3 列)。
-
按
Ctrl + v进入可视块模式。 -
向下移动光标(按
j或G)选中所有需要操作的行。 -
按
Shift + i(即大写I)进入插入模式。 -
输入你要添加的字符(如
,)。 -
关键一步 :按
Esc键,稍等片刻,所有选中的行都会在光标列插入该字符。
2. 批量修改/替换(将相同列的内容换成新文字)
如果你想把这列里的旧字符(比如所有行的第 2~5 列)统一改成新内容(如 ---):
-
将光标移到第一行目标列的起始位置。
-
按
Ctrl + v选中块,按l(小写 L)向右扩展列,按j向下扩展行,精确框选住旧文本。 -
按
c(修改)键,选中的矩形块会被删除并自动进入插入模式。 -
输入你要替换的新内容(如
---)。 -
按
Esc,新内容会填满整个选中的矩形区域。
3. 批量删除(删除相同列的内容)
想删除所有行第 5 列的单个字符,或连续 3 列的内容:
-
删除单个字符 :
Ctrl + v选中多行的该列 → 按d。 -
删除连续多列 :
Ctrl + v选中块 → 向右扩展(按l)选中几列 → 按d。
4. 批量追加内容(在选中块的最右侧统一加东西)
如果你想在每行选中的列之后统一加内容(类似追加,而不是插入在光标前):
-
Ctrl + v选中列块(可以选择整列或只框选一个点)。 -
按
Shift + a(即大写A)进入插入模式。 -
此时光标会跳到当前行选中区域的末尾,输入你要追加的字符。
-
按
Esc,所有行的同一列后面都会加上该字符。
四、进阶功能
1. 宏录制(自动化重复操作)
宏可以录制一系列操作并重复执行:
操作步骤:
-
qa--- 开始录制到寄存器 a(q+ 寄存器名) -
执行一系列操作(如删除、修改、移动等)
-
q--- 结束录制 -
@a--- 播放宏一次 -
10@a--- 播放宏 10 次
实战技巧 :录制时使用相对运动(如 f/t 定位)而非绝对行号,使宏更具通用性。
2. 寄存器系统
Vim 提供多种寄存器用于精细化的文本操作:
| 寄存器类型 | 表示 | 用途 |
|---|---|---|
| 无名寄存器 | "" |
默认操作寄存器 |
| 数字寄存器 | "0-"9 |
存储删除历史 |
| 命名寄存器 | "a-"z |
持久化存储 |
| 黑洞寄存器 | "_ |
丢弃操作结果(删除不保存) |
使用示例:
-
"ayiw--- 将当前单词存入寄存器 a -
"ap--- 粘贴寄存器 a 的内容 -
"+y--- 复制到系统剪贴板(需支持)
3. 分屏与多窗口
分屏操作:
-
:sp [file]--- 水平分割窗口 -
:vsp [file]--- 垂直分割窗口 -
Ctrl+w w--- 在窗口间循环切换 -
Ctrl+w h/j/k/l--- 切换到左/下/上/右窗口 -
Ctrl+w c--- 关闭当前窗口 -
Ctrl+w =--- 均衡窗口大小
标签页:
-
:tabnew [file]--- 新建标签页 -
gt--- 切换到下一个标签页 -
gT--- 切换到上一个标签页
4. 多文件编辑
-
vim file1 file2--- 同时打开多个文件 -
:args--- 显示当前编辑的文件列表 -
:next--- 切换到下一个文件 -
:prev--- 切换到前一个文件
5. 插入模式下的小技巧
-
Ctrl+h--- 删除前一个字符 -
Ctrl+w--- 删除前一个单词 -
Ctrl+r+"--- 粘贴默认寄存器内容 -
Ctrl+r+=--- 插入表达式计算结果(如时间戳)
五、个性化配置(.vimrc)
Vim 的配置文件 ~/.vimrc 可高度定制:
bash
" 显示设置
set number " 显示行号
set relativenumber " 显示相对行号
set cursorline " 高亮当前行
" 缩进与制表符
set tabstop=4 " 制表符宽度
set expandtab " 将制表符转为空格
set autoindent " 自动缩进
" 搜索优化
set hlsearch " 高亮搜索结果
set incsearch " 增量搜索
" 语法高亮
syntax on " 开启语法高亮