快速上手 Vim 编辑器
约 1536 字大约 5 分钟
2025-10-18
Vim 是 Linux 系统下经典的文本编辑器,几乎所有 Unix/Linux 系统都能找到它。它功能强大,灵活高效,但学习曲线稍陡。本文旨在帮你快速入门 Vim,掌握日常使用的基本命令,让你逐步替代 nano 进行高效文本编辑。
基本概念
Vim 与传统编辑器不同,它有 三种主要模式:
| 模式 | 功能 | 如何进入 | 特点 |
|---|---|---|---|
| 普通模式 (Normal) | 浏览文件、移动光标、删除、复制、粘贴、搜索等操作 | 启动 Vim 默认就是,或者按 Esc 从其他模式回到普通模式 | 按键是命令,不会直接输入字符 |
| 插入模式 (Insert) | 输入文本 | 在普通模式按 i/a/o 等进入 | 按键会直接被当作文本插入到文件里 |
| 命令模式 (Command / Ex Mode) | 保存文件、退出、替换等操作 | 普通模式按 : | 输入的是命令而不是文本 |
小技巧:
- 按
Esc都可以回到普通模式,这是 Vim 的“安全键”。
如果你在 插入模式(也就是按 i、a、o 进入的模式)下,Vim 会把你按下的所有按键当成文本,而不是命令。这就是你看到的现象:
- 你按
dd→ 变成打字 “dd” - 你按
/keyword→ 变成打字 “/keyword”
解决办法:
- 按
Esc回到普通模式 - 然后再输入命令(比如
dd删除行,:w保存文件)
快速启动 Vim
# 编辑或新建文件
vim filename.txt启动后进入 普通模式,即可操作。
插入文本
| 命令 | 功能 | 说明 |
|---|---|---|
i | 在光标前插入 | 最常用 |
I | 在行首插入 | |
a | 在光标后插入 | |
A | 在行尾插入 | |
o | 在当前行下新开一行 | 自动进入插入模式 |
O | 在当前行上新开一行 | 自动进入插入模式 |
返回普通模式:按 Esc
保存与退出
| 命令 | 说明 |
|---|---|
:w | 保存文件 |
:q | 退出 Vim |
:wq 或 :x | 保存并退出 |
:q! | 不保存强制退出 |
小技巧:
ZZ(大写)也可保存并退出,快捷方便。
文本移动与光标操作
| 命令 | 功能 |
|---|---|
h | 左移一个字符 |
l | 右移一个字符 |
k | 上移一行 |
j | 下移一行 |
0 | 跳到行首 |
^ | 跳到行首第一个非空字符 |
$ | 跳到行尾 |
gg | 跳到文件开头 |
G | 跳到文件末尾 |
w | 跳到下一个单词开头 |
e | 跳到单词末尾 |
删除、复制、粘贴
| 命令 | 功能 |
|---|---|
x | 删除光标所在字符 |
dd | 删除整行 |
dw | 删除到下一个单词开头 |
d$ | 删除到行尾 |
yy | 复制整行(Yank) |
yw | 复制到单词末尾 |
p | 粘贴到光标后 |
P | 粘贴到光标前 |
小技巧:
- Vim 的删除命令其实是复制+删除的组合,因此可以直接用
p粘贴。
撤销与重做
| 命令 | 功能 |
|---|---|
u | 撤销上一次操作 |
Ctrl + r | 重做撤销操作 |
搜索与替换
| 命令 | 功能 |
|---|---|
/keyword | 向下搜索 keyword |
?keyword | 向上搜索 keyword |
n | 跳到下一个匹配 |
N | 跳到上一个匹配 |
:%s/old/new/g | 全文件替换 old 为 new |
:s/old/new/g | 当前行替换 old 为 new |
多文件编辑与分屏(进阶)
| 命令 | 功能 |
|---|---|
:e otherfile.txt | 打开新文件 |
:split filename 或 :vsplit filename | 水平/垂直分屏 |
Ctrl + w + h/j/k/l | 切换分屏 |
:bn / :bp |
快速练习方法
- 打开终端输入:
vimtutorVim 官方自带教程,10-15 分钟即可掌握基本操作。
- 在日常修改配置文件时刻意用 Vim 代替 nano。
- 逐步学习更多命令和插件,比如语法高亮、自动补全。
解决自动缩进
当你复制的内容里带有 换行符 或者从外部(浏览器、编辑器、网页、PDF 等)复制的文本时。它的本质是 Vim 对粘贴行为有“自动缩进/自动格式化”,导致粘贴内容“压在一起”。
Vim 默认会 自动缩进(autoindent / smartindent / smarttab)
当你在普通模式下用 p 粘贴内容时,Vim 会尝试对每一行做缩进对齐
如果复制的内容已经带有缩进或换行,Vim 可能把所有行挤在一起,或者缩进不正确
解决方法
方法 A:开启“粘贴模式”(Paste Mode)
粘贴前切换 Vim 到 粘贴模式,Vim 不会自动调整缩进:
:set paste粘贴完之后再关闭:
:set nopaste建议:可以给 F2 或其他按键映射一个切换快捷键:
" 在 .vimrc 里
nnoremap <F2> :set paste!<CR>按 F2 就能开/关粘贴模式,非常方便。
vim ~/.vimrc在 .vimrc 里加这几行:
" 显示当前模式
set showmode
" F2 键切换粘贴模式
nnoremap <F2> :set paste!<CR>解释:
set showmode:在 Vim 底部状态栏显示当前模式,方便确认是否启用了粘贴模式nnoremap <F2> :set paste!<CR>:在普通模式下按 F2 切换粘贴模式- 开启时不会自动缩进,粘贴内容不会压在一起
- 再按一次关闭,恢复正常编辑模式
在 Vim 里保存退出:
:wq然后重新打开 Vim 或者在当前 Vim 里执行:
:source ~/.vimrc使用方法
- 进入 Vim 编辑文件
- 按 F2 开启粘贴模式
- 状态栏会显示
-- INSERT (paste) --或类似标记
- 状态栏会显示
- 粘贴内容(
p或"+p) - 按 F2 关闭粘贴模式,继续正常编辑
方法 B:使用 Vim 的“块粘贴”快捷方式
- 在普通模式下用
"+p粘贴系统剪贴板内容 - 结合
:set paste可以保证格式不乱
例如:
:set paste
"+p
:set nopaste方法 C:临时使用 插入模式 + 鼠标粘贴
- 按
i进入插入模式 - 右键或 Shift+Insert 粘贴
- 然后 Esc 回到普通模式
这种方法有时受终端和 Vim 配置影响,可能仍然会自动缩进,但简单操作可以尝试。
方法 D:关闭自动缩进(不推荐长期关闭)
:set noautoindent
:set nosmartindent关闭后粘贴不会乱,但普通写代码可能缩进会麻烦,一般只在粘贴前临时关闭。