1. Vim 的三种核心模式
Vim 不同于普通编辑器,它基于模式:
-
正常模式(Normal Mode) :启动后的默认模式。在此模式下,按键执行命令(如移动光标、删除、复制),不能直接输入文字。
-
插入模式(Insert Mode) :用于输入文本。按
i进入,按Esc返回正常模式。 -
可视模式(Visual Mode) :用于选择文本块。按
v(字符选择)、V(行选择)或Ctrl+v(块选择)进入,结合移动键选取,然后可进行复制、删除等操作。 -
命令行模式(Command-Line Mode) :在正常模式下按
:进入,底部出现冒号,可输入命令(如保存、退出、查找替换)。
记住:绝大多数时间你应该停留在正常模式,仅在输入文字时切换到插入模式。
2. 启动与退出
2.1 打开文件
bash
vim filename # 打开或新建文件
vim +10 filename # 打开文件并定位到第10行
vim +/pattern file # 打开文件并定位到第一个匹配 pattern 的行
vim file1 file2 # 同时打开多个文件(:n 切换)
2.2 保存与退出(在正常模式输入 : 命令)
-
:w保存文件 -
:w filename另存为 filename -
:q退出(文件未修改时) -
:q!强制退出,不保存修改 -
:wq或:x保存并退出 -
ZZ保存并退出(相当于:wq,在正常模式直接按大写 ZZ)
3. 移动光标(正常模式下)
3.1 基本移动
-
h左移一格 -
j下移一行 -
k上移一行 -
l右移一格
3.2 单词移动
-
w跳到下一个单词开头 -
b跳到当前单词/上一个单词开头 -
e跳到当前单词/下一个单词结尾
3.3 行内移动
-
0跳至行首(绝对行首) -
^跳至行首第一个非空白字符 -
$跳至行尾
3.4 页面移动
-
Ctrl+f向下翻页(forward) -
Ctrl+b向上翻页(backward) -
Ctrl+d向下半页 -
Ctrl+u向上半页 -
H跳至屏幕顶端(Home) -
M跳至屏幕中间 -
L跳至屏幕底端(Last)
3.5 文件内跳转
-
gg跳至文件第一行 -
G跳至文件最后一行 -
:n跳至第 n 行(如:100跳到 100 行) -
Ctrl+o跳回上一个位置(后退) -
Ctrl+i跳向前一个位置(前进)
4. 插入文本(进入插入模式)
-
i在光标前插入 -
I在当前行首插入 -
a在光标后插入(append) -
A在当前行尾插入 -
o在当前行下方新开一行插入 -
O在当前行上方新开一行插入 -
s删除光标处字符并进入插入 -
S删除整行并进入插入
按
Esc返回正常模式。
5. 文本编辑操作(正常模式下)
5.1 删除
-
x删除光标处字符(相当于 Del) -
X删除光标前字符(相当于 Backspace) -
dd删除当前行 -
d2d或2dd删除从当前行开始的 2 行 -
dw删除从光标到单词结尾 -
d$或D删除从光标到行尾 -
d^删除从光标到行首(非空字符) -
dG删除从当前行到文件末尾 -
dgg删除从当前行到文件开头
5.2 复制与粘贴
-
yy或Y复制当前行 -
y2y或2yy复制 2 行 -
yw复制一个单词 -
p在光标后粘贴(小写 p) -
P在光标前粘贴(大写 P)
5.3 撤销与重做
-
u撤销上一步操作 -
Ctrl+r重做(恢复撤销)
5.4 替换
-
r替换光标处的一个字符(按 r 后输入新字符) -
R进入替换模式(连续替换,Esc 退出) -
~切换光标处字母的大小写
6. 查找与替换
6.1 查找
-
/pattern向下查找 pattern -
?pattern向上查找 pattern -
n继续向同一方向查找下一个 -
N向反方向查找上一个 -
:set hlsearch高亮所有匹配(:set nohlsearch取消) -
:nohlsearch临时取消当前高亮
6.2 替换
-
:s/old/new将当前行第一个 old 替换为 new -
:s/old/new/g将当前行所有 old 替换为 new -
:5,10s/old/new/g在第 5 到 10 行替换 -
:%s/old/new/g在整个文件中替换 -
:%s/old/new/gc替换时逐个询问确认(c 表示 confirm)
7. 可视模式
-
v进入字符可视模式,移动光标选择字符。 -
V进入行可视模式,选择整行。 -
Ctrl+v进入块可视模式,可选择矩形块(常用于批量注释)。
选择后可以:
-
d删除选中内容 -
y复制选中内容 -
p粘贴(会覆盖选中内容) -
~切换大小写 -
U转为大写 -
u转为小写 -
J合并选中的行
示例:批量注释多行
-
Ctrl+v进入块模式 -
移动光标选中多行的第一列
-
按
I进入插入(在块开始处) -
输入
# -
按
Esc两次,所有选中行首都会加上#