说明:
vi 通常是传统编辑器,vim 是 vi improved,功能更完整,日常更推荐使用 vim。
- 在很多 Linux 系统中可以直接用
vi 启动 vim,但也有系统只安装了最基础的 vi。
- Vim 是典型的“模式化编辑器”,先理解模式,再记命令,会更容易上手。
sudo apt update
sudo apt install vim
vim file.txt # 打开文件
vim +10 file.txt # 打开文件并跳到第 10 行
vim +/main file.c # 打开文件并搜索 main
vim .vimrc # 编辑配置文件
| 模式 |
作用 |
进入方式 |
| 普通模式 |
移动光标、删除、复制、粘贴、搜索、切换窗口 |
打开 Vim 后默认进入 |
| 插入模式 |
输入和修改文本 |
i、a、o 等 |
| 命令行模式 |
保存、退出、查找替换、设置选项 |
在普通模式按 :、/、? |
- 按
Esc 可以从插入模式、可视模式等回到普通模式。
- 普通模式下输入
: 进入命令行模式。
- 普通模式下输入
/ 为向下搜索,输入 ? 为向上搜索。
| 命令 |
作用 |
i |
在当前光标前进入插入模式 |
I |
在当前行行首进入插入模式 |
a |
在当前光标后进入插入模式 |
A |
在当前行行尾进入插入模式 |
o |
在当前行下方新建一行并进入插入模式 |
O |
在当前行上方新建一行并进入插入模式 |
s |
删除当前字符并进入插入模式 |
S |
删除整行并进入插入模式 |
cw |
修改当前单词并进入插入模式 |
cc |
修改整行内容并进入插入模式 |
r |
替换当前一个字符,不会持续进入插入模式 |
| 命令 |
作用 |
h j k l |
左下上右移动 |
0 |
移到行首 |
^ |
移到本行第一个非空字符 |
$ |
移到行尾 |
w |
跳到下一个单词开头 |
b |
跳到上一个单词开头 |
e |
跳到当前或下一个单词结尾 |
| 命令 |
作用 |
gg |
跳到文件首行 |
G |
跳到文件末行 |
nG |
跳到第 n 行 |
:n |
跳到第 n 行 |
% |
在括号、花括号、方括号配对间跳转 |
| 命令 |
作用 |
Ctrl+f |
向下翻一页 |
Ctrl+b |
向上翻一页 |
Ctrl+d |
向下翻半页 |
Ctrl+u |
向上翻半页 |
zz |
让当前行滚动到屏幕中间 |
zt |
让当前行滚动到屏幕顶部 |
zb |
让当前行滚动到屏幕底部 |
| 命令 |
作用 |
x |
删除当前字符 |
X |
删除光标前一个字符 |
dd |
删除当前行 |
ndd |
向下删除 n 行 |
dw |
删除到下一个单词开头 |
de |
删除到单词结尾 |
d$ |
删除到行尾 |
d0 |
删除到行首 |
diw |
删除当前单词 |
| 命令 |
作用 |
yy |
复制当前行 |
nyy |
复制当前行及向下 n 行 |
yw |
复制一个单词 |
p |
在光标后粘贴 |
P |
在光标前粘贴 |
| 命令 |
作用 |
cw |
修改当前单词 |
ciw |
修改当前单词内容 |
C |
修改到行尾 |
J |
将下一行合并到当前行 |
| 命令 |
作用 |
u |
撤销上一步操作 |
Ctrl+r |
重做被撤销的操作 |
. |
重复上一次修改命令 |
. 非常实用,例如先执行一次 cwxxx,后续移动到别处后按 . 可重复同样的修改动作。
| 命令 |
作用 |
/text |
向下搜索 text |
?text |
向上搜索 text |
n |
跳到下一个匹配项 |
N |
跳到上一个匹配项 |
* |
向下搜索当前光标所在单词 |
# |
向上搜索当前光标所在单词 |
:noh |
取消搜索高亮 |
:s/old/new/ " 替换当前行第一个 old
:s/old/new/g " 替换当前行所有 old
:%s/old/new/g " 替换全文所有 old
:%s/old/new/gc " 替换全文并逐个确认
:10,20s/old/new/g " 只替换第 10 到 20 行
可视模式适合“先选中,再操作”。
| 命令 |
作用 |
v |
字符可视模式 |
V |
行可视模式 |
Ctrl+v |
块可视模式 |
y |
复制选中内容 |
d |
删除选中内容 |
p |
用寄存器内容替换选中内容 |
> |
整体右缩进 |
< |
整体左缩进 |
Vj 选中当前行和下一行
Ctrl+v 块选中一列内容
> 将选中的代码整体右移
| 命令 |
作用 |
:w |
保存文件 |
:w filename |
另存为新文件 |
:q |
退出 |
:q! |
强制退出,不保存 |
:wq |
保存并退出 |
:x |
文件有修改则保存并退出 |
ZZ |
在普通模式下保存并退出 |
- 在终端里按
Ctrl+s 往往不是保存,而是暂停终端输出。
- 如果误按了
Ctrl+s,可以按 Ctrl+q 恢复终端。
:e file2.txt " 打开另一个文件
:bn " 下一个缓冲区
:bp " 上一个缓冲区
:ls " 查看当前缓冲区列表
:b 2 " 切换到编号为 2 的缓冲区
:split file.txt " 水平分屏
:vsplit file.txt " 垂直分屏
Ctrl+w w " 在窗口之间切换
Ctrl+w h/j/k/l " 切换到左/下/上/右窗口
Ctrl+w q " 关闭当前窗口
:tabnew file.txt " 新建标签页并打开文件
:tabnext " 下一个标签页
:tabprev " 上一个标签页
gt " 下一个标签页
gT " 上一个标签页
| 命令 |
作用 |
>> |
当前行右缩进 |
<< |
当前行左缩进 |
n>> |
连续 n 行右缩进 |
== |
自动整理当前行缩进 |
gg=G |
自动整理全文缩进 |
下面这些命令可以在 Vim 中临时生效:
:set nu " 显示行号
:set nonu " 关闭行号
:set hlsearch " 搜索结果高亮
:set ignorecase " 搜索忽略大小写
:set paste " 粘贴模式,适合粘贴代码
:set nopaste " 关闭粘贴模式
:syntax on " 打开语法高亮
如果希望长期生效,可以写入 ~/.vimrc:
set nu
set hlsearch
set ignorecase
syntax on
gg 跳到文件开头
G 跳到文件结尾
yy 复制当前行
p 粘贴
dd 删除当前行
u 撤销
Ctrl+r 重做
/main 搜索 main
n 跳到下一个结果
:%s/old/new/gc
全文替换并逐个确认
gg=G 全文自动缩进
Vjj> 选中 3 行并整体右缩进
- Vim 最重要的不是死记命令,而是先记住“普通模式负责操作,插入模式负责输入”。
- 很多命令都支持数字前缀,例如
3dd、5yy、10G。
- Vim 常见操作可以理解为“操作符 + 对象”,例如
dw、d$、ciw。
- 先按
Esc 回到普通模式,再执行命令,是减少误操作的好习惯。
- 进入文件后按
i 开始输入内容。
- 输入完成后按
Esc 回到普通模式。
- 输入
:w 保存文件。
- 输入
:q 退出 Vim。
- 也可以直接输入
:wq 一次完成保存并退出。