📖 一、Vim 核心理念
要精通Vim,首先要理解其核心语法:操作符 (Operator)
+ 动作 (Motion)
。
- 操作符:定义要“做什么”,例如
d
(删除), y
(复制), c
(修改)。
- 动作:定义操作的“范围”,例如
w
(一个单词), $
(到行尾), }
(一个段落)。
组合起来,你就能创造出无限可能:dw
(删除一个单词), y$
(复制到行尾), c}
(修改整个段落)。
🚀 二、基础生存法则 (入门必会)
命令 | 功能描述 |
---|
模式切换 | |
i | 在光标前进入插入模式 (Insert) |
a | 在光标后进入插入模式 (Append) |
o | 在当前行下方新建一行并进入插入模式 (Open) |
Esc | 从插入或可视模式返回到普通模式 (Normal Mode) |
保存与退出 (命令行模式) | |
:w | 保存文件 |
:q | 退出 |
:wq | 保存并退出 |
:q! | 强制退出 (不保存修改) |
:x | 保存并退出 (仅在文件有修改时才写入) |
ZZ | (普通模式下) 保存并退出,等同于 :wq |
🎯 三、光标移动 (Motion)
1. 基本移动
命令 | 功能描述 |
---|
h j k l | 左、下、上、右 |
w | 向前移动到下一个单词词首 |
b | 向后移动到上一个单词词首 |
0 | 移动到行首 (第0列) |
^ | 移动到行首的第一个非空白字符 |
$ | 移动到行尾 |
gg | 跳转到文件第一行 |
G | 跳转到文件最后一行 |
:n 或 nG | 跳转到第 n 行 |
2. 翻页与屏幕移动
命令 | 功能描述 |
---|
Ctrl + f | 向下翻一页 (Forward) |
Ctrl + b | 向上翻一页 (Backward) |
Ctrl + d | 向下翻半页 (Down) |
Ctrl + u | 向上翻半页 (Up) |
H | 移动到屏幕顶部 (Head) |
M | 移动到屏幕中部 (Middle) |
L | 移动到屏幕底部 (Low) |
✍️ 四、文本编辑 (常用操作)
1. 删除 / 剪切 (Delete / Cut)
命令 | 功能描述 |
---|
x | 删除光标下的字符 (等同于 dl ) |
X | 删除光标前的字符 (等同于 dh ) |
dd | 删除/剪切当前行 |
ndd | 删除/剪切从当前行开始的 n 行 (如 5dd ) |
dw | 删除一个单词 |
d$ 或 D | 从光标删除到行尾 |
d0 | 从光标删除到行首 |
dG | 删除到文件末尾 |
dgg | 删除到文件开头 |
2. 复制 (Copy / Yank)
命令 | 功能描述 |
---|
yy | 复制当前行 |
nyy | 复制从当前行开始的 n 行 (如 5yy ) |
yw | 复制一个单词 |
y$ | 复制到行尾 |
y0 | 复制到行首 |
yG | 复制到文件末尾 |
ygg | 复制到文件开头 |
3. 粘贴 (Paste)
命令 | 功能描述 |
---|
p | 在光标后粘贴 (如果复制的是行,则在当前行下粘贴) |
P | 在光标前粘贴 (如果复制的是行,则在当前行上粘贴) |
4. 修改 (Change)
命令 | 功能描述 |
---|
cc 或 S | 删除当前行并进入插入模式 |
cw | 修改一个单词 (删除单词后进入插入模式) |
c$ 或 C | 修改至行尾 (删除至行尾后进入插入模式) |
r | 替换光标下的单个字符 (Replace) |
~ | 切换光标下字符的大小写 |
J | 合并当前行与下一行 |
. | 重复上一个修改命令 (极其强大!) |
5. 撤销与重做
命令 | 功能描述 |
---|
u | 撤销上一步操作 (Undo) |
Ctrl + r | 重做 (Redo) |
👁️ 五、可视化模式 (Visual Mode)
进入可视化模式后,可以移动光标来选择文本块,然后执行操作符(如d
, y
, c
)。
命令 | 模式 | 功能描述 |
---|
v | 字符选择 | 按字符为单位选择文本 |
V | 行选择 | 按行为单位选择文本 |
Ctrl + v | 块选择 | 进行矩形块选择,可实现列编辑 |
列编辑实用技巧 (Ctrl+v):
Ctrl + v
进入块选择模式。
- 使用
j
, k
或 G
选择需要编辑的列。
- 按
I
(大写I) 进入行首插入模式,输入要添加的内容。
- 按
Esc
,你输入的内容会奇迹般地应用到所有选中的行。
- 同样,选中后按
<
或 >
可以实现整块的左右缩进。
🔍 六、查找与替换 (命令行模式)
1. 查找
命令 | 功能描述 |
---|
/pattern | 从上到下查找 pattern |
?pattern | 从下到上查找 pattern |
n | 跳转到下一个匹配项 |
N | 跳转到上一个匹配项 |
:set hlsearch | 设置搜索结果高亮 (可写入~/.vimrc 永久生效) |
:nohlsearch 或 :noh | 取消当前搜索的高亮 |
2. 替换
语法: :[范围]s/查找内容/替换内容/[标志]
- 范围:
- 标志:
g
: (global) 替换行内所有匹配项,不加则只替换第一个。
c
: (confirm) 每次替换前进行确认。
i
: (ignorecase) 忽略大小写。
命令 | 功能描述 |
---|
:%s/old/new/g | 全文将 old 替换为 new |
:1,$s/old/new/gc | 全文替换,每次替换前提示确认 |
:%s/^\s\+//g | 删除所有行首的空白 |
:%s/\s\+$//g | 删除所有行尾的空白 |
:%s/^M//g | 删除 ^M 字符 (输入 ^M 需按 Ctrl+v 再按 Ctrl+m ) |
🪟 七、窗口与多文件管理
1. 多文件/窗口
命令 | 功能描述 |
---|
vim file1 file2 | 同时打开多个文件 |
:sp file 或 :new file | 水平分割窗口,打开新文件 |
:vsp file 或 :vnew file | 垂直分割窗口,打开新文件 |
Ctrl + w w | 在不同窗口间循环切换 |
Ctrl + w + h/j/k/l | 切换到左/下/上/右侧的窗口 |
:close 或 :q | 关闭当前窗口 |
:only | 只保留当前窗口,关闭其他所有窗口 |
2. 标签页 (Tabs)
命令 | 功能描述 |
---|
vim -p file1 file2 | 以标签页形式打开多个文件 |
:tabnew file | 在新标签页中打开文件 |
gt 或 :tabn | 切换到下一个标签页 |
gT 或 :tabp | 切换到上一个标签页 |
ntabn | (n为数字) 跳转到第 n 个标签页 |
:tabc | 关闭当前标签页 |
:tabo | 只保留当前标签页,关闭其他 |
🛠️ 八、高级技巧与设置
命令 | 功能描述 |
---|
文件信息与格式 | |
Ctrl + g | 显示当前文件名、路径及文件状态 |
:set nu / :set nonu | 显示/隐藏行号 |
:set paste / :set nopaste | 进入/退出粘贴模式 (防止自动缩进搞乱格式) |
:set ai / :set noai | 启用/禁用自动缩进 |
剪贴板交互 | |
:reg | 查看所有寄存器内容 |
"+y | (可视化模式下) 复制选中内容到系统剪贴板 |
"+p | 粘贴系统剪贴板的内容 |
行操作 | |
:m n | 将当前行移动到第 n 行之后 |
:13m14 | 将第 13 行移动到第 14 行之后 |
g/pattern/d | 删除所有包含 pattern 的行 |
g!/pattern/d 或 v/pattern/d | 删除所有不包含 pattern 的行 |
文件加解密 | |
vim -x file | 创建或编辑一个加密文件 |
:X | 为当前文件设置密码 |
启动时定位 | |
vim +n filename | 打开文件并直接跳转到第 n 行 |
vim + filename | 打开文件并直接跳转到最后一行 |