Vim 是 Linux 终端里非常常用的文本编辑器。平时修改配置文件、写脚本、在服务器或 Docker 容器里临时改代码,经常都会用到它。

刚开始接触 Vim 时,最容易卡住的地方不是“怎么高效编辑”,而是“怎么进入编辑、怎么保存、怎么退出”。所以这篇文章先从最基本的生存命令开始,再逐步整理移动、复制粘贴、查找替换、多文件编辑和常用配置。

一、安装 Vim

在 Ubuntu / Debian 系统中安装:

1
2
sudo apt update
sudo apt install -y vim

查看版本:

1
vim --version

如果只是临时使用,系统里也可能已经有 vi:

1
vi 文件名

不过日常更推荐安装并使用 vim。

二、打开和创建文件

打开一个已有文件:

1
vim test.txt

如果 test.txt 不存在,Vim 会在保存时创建这个文件。

打开某个系统配置文件:

1
sudo vim /etc/hosts

打开后,默认处于普通模式,此时直接敲键盘不会像普通编辑器一样输入文字。

三、理解 Vim 的几种模式

Vim 最重要的特点是“模式编辑”。常用模式有下面几种:

模式 作用 进入方式 退出方式
普通模式 移动光标、复制、删除、保存退出 打开文件后默认进入 按 i、a、o 等进入插入模式
插入模式 正常输入文字 在普通模式按 i、a、o 按 Esc 回到普通模式
命令模式 保存、退出、查找替换等 普通模式按 : 执行命令后自动返回普通模式
可视模式 选择一段文本 普通模式按 v、V、Ctrl + v 按 Esc 回到普通模式

四种模式之间的切换关系如下,所有模式都经过普通模式中转:

i / a / o

Esc

:

执行后自动返回

v / V / Ctrl + v

Esc

普通模式

插入模式

命令模式

可视模式

i / a / o

Esc

:

执行后自动返回

v / V / Ctrl + v

Esc

普通模式

插入模式

命令模式

可视模式

最常用的一套流程:打开文件(普通模式)→ 按 i 进入插入模式输入内容 → 按 Esc 回到普通模式 → 输入 :wq 保存退出。

四、最重要的保存和退出

这些命令都需要先按 Esc 回到普通模式,再输入 : 进入命令模式。

功能 命令
保存文件 :w
退出 Vim :q
保存并退出 :wq
保存并退出 :x
不保存强制退出 :q!
强制保存 :w!

刚开始最常用的是 :wq;改乱了不想保存时用 :q!。

五、进入插入模式

在普通模式下,可以通过下面这些按键进入插入模式:

按键 作用
i 在当前光标前插入
a 在当前光标后插入
I 在当前行开头插入
A 在当前行末尾插入
o 在当前行下方新建一行并插入
O 在当前行上方新建一行并插入

最开始只记两个就够:

  • i:开始编辑当前内容。
  • o:新开一行继续写。

六、移动光标

Vim 中可以用方向键移动,也可以用 h、j、k、l 移动:

按键 方向
h 左
j 下
k 上
l 右

常用移动命令:

功能 命令
移动到行首 0
移动到行尾 $
移动到文件第一行 gg
移动到文件最后一行 G
移动到第 20 行 20G 或 :20
向后移动一个单词 w
向前移动一个单词 b
移动到当前单词结尾 e

翻页操作:

功能 命令
向下翻半屏 Ctrl + d
向上翻半屏 Ctrl + u
向下翻一屏 Ctrl + f
向上翻一屏 Ctrl + b

七、删除、修改和撤销

常用删除命令:

功能 命令
删除当前字符 x
删除当前行 dd
删除 3 行 3dd
删除当前光标到行尾 D
删除当前单词 dw
删除当前光标到单词结尾 de

常用修改命令:

功能 命令
修改当前字符 r 后接新字符
删除当前字符并进入插入模式 s
删除当前行并进入插入模式 cc
删除当前光标到行尾并进入插入模式 C

撤销和重做:

功能 命令
撤销上一步 u
重做 Ctrl + r

误删了一行,按 u 撤销即可。

八、复制、剪切和粘贴

在 Vim 里,删除操作很多时候也可以理解成“剪切”。

功能 命令
复制当前行 yy
复制 3 行 3yy
剪切当前行 dd
粘贴到当前行下方 p
粘贴到当前行上方 P

例如复制当前行并粘贴到下一行:先按 yy,再按 p。剪切当前行并移到其他位置:按 dd,移动光标到目标位置,再按 p。

九、可视模式选择文本

普通模式下按 v 进入字符选择,按 V 进入整行选择。

功能 命令
字符选择 v
整行选择 V
块选择 Ctrl + v
复制选中内容 y
删除选中内容 d
粘贴 p

如果想复制一整段内容:

  1. 按 V 进入整行选择。
  2. 使用 j / k 选择多行。
  3. 按 y 复制。
  4. 移动到目标位置后按 p 粘贴。

十、查找和替换

1. 查找文本

功能 命令
向下查找 /关键词
向上查找 ?关键词
跳到下一个匹配 n
跳到上一个匹配 N

2. 替换文本

功能 命令
替换当前行第一个匹配 :s/旧内容/新内容/
替换当前行所有匹配 :s/旧内容/新内容/g
替换全文所有匹配 :%s/旧内容/新内容/g
替换全文并逐个确认 :%s/旧内容/新内容/gc

其中 % 表示全文,s 是 substitute(替换),g 表示一行内的所有匹配,c 是 confirm(每次替换前确认)。

十一、显示行号和常用临时设置

功能 命令
开启行号 :set number
关闭行号 :set nonumber
开启搜索高亮 :set hlsearch
清除搜索高亮 :nohlsearch
开启自动缩进 :set autoindent
显示当前文件名和状态 :f

这些设置只对当前会话有效,想长期生效需要写进 .vimrc(见第十五节)。

十二、编辑多个文件

一次打开多个文件:

1
vim file1.txt file2.txt
功能 命令
查看缓冲区列表 :ls
切换到下一个文件 :bn
切换到上一个文件 :bp
打开另一个文件 :e another.txt
保存全部文件 :wa
退出全部文件 :qa
保存并退出全部文件 :wqa

十三、分屏编辑

横向分屏打开文件用 :split file.txt(简写 :sp file.txt),纵向分屏用 :vsplit file.txt(简写 :vsp file.txt)。

分屏后常用快捷键:

功能 命令
切换到左侧窗口 Ctrl + w 后按 h
切换到下方窗口 Ctrl + w 后按 j
切换到上方窗口 Ctrl + w 后按 k
切换到右侧窗口 Ctrl + w 后按 l
关闭当前窗口 :q

十四、没有权限保存怎么办

有时打开系统文件时忘了加 sudo:

1
vim /etc/hosts

编辑完保存时可能提示没有权限。可以在 Vim 中执行:

1
:w !sudo tee %

执行后输入当前用户密码,文件就会通过 sudo tee 写回去。

其中 :w 把当前缓冲区内容写出,!sudo tee % 把内容交给外部命令 sudo tee,% 代表当前文件名。保存成功后如果 Vim 提示文件已改变,输入 :e! 重新加载当前文件。

十五、配置 vimrc

如果希望每次打开 Vim 都自动显示行号、开启语法高亮,可以编辑用户配置文件:

1
vim ~/.vimrc

一个简单的配置示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
" 显示行号
set number

" 开启语法高亮
syntax on

" 开启文件类型检测
filetype plugin indent on

" 搜索时忽略大小写,输入大写字母时自动区分大小写
set ignorecase
set smartcase

" 搜索时边输入边高亮
set incsearch
set hlsearch

" Tab 显示为 4 个空格宽度
set tabstop=4
set shiftwidth=4
set softtabstop=4

" 按 Tab 输入空格
set expandtab

" 自动缩进
set autoindent
set smartindent

" 显示当前光标所在行
set cursorline

" 底部显示命令
set showcmd

" 显示模式
set showmode

" 支持鼠标
set mouse=a

保存后重新打开 Vim 即可生效。不想使用鼠标的话,删掉 set mouse=a 这一行。

十六、常用命令速查

场景 命令
打开文件 vim 文件名
进入插入模式 i
退出插入模式 Esc
保存 :w
退出 :q
保存并退出 :wq
不保存退出 :q!
撤销 u
重做 Ctrl + r
删除当前行 dd
复制当前行 yy
粘贴 p
查找 /关键词
全文替换 :%s/旧内容/新内容/g
显示行号 :set number
跳到文件开头 gg
跳到文件末尾 G
跳到第 20 行 20G

十七、推荐练习顺序

刚开始不要一口气背太多命令,可以按下面顺序练:

  1. 用 vim test.txt 打开文件。
  2. 按 i 输入几行文字。
  3. 按 Esc 回到普通模式。
  4. 用 :w 保存。
  5. 用 dd 删除一行,再用 u 撤销。
  6. 用 yy 复制一行,再用 p 粘贴。
  7. 用 /关键词 查找内容。
  8. 用 :%s/旧内容/新内容/gc 练习确认替换。
  9. 最后用 :wq 保存退出。

熟悉这些以后,日常修改配置文件、编辑脚本、在服务器里处理文本基本就够用了。

小结

学 Vim 不需要一次记住所有快捷键,关键是先建立“模式”的概念:普通模式负责操作,插入模式负责输入,命令模式负责保存退出和高级命令。先熟练 i、Esc、:wq、:q! 和 dd、yy、p、u,再逐步学习查找替换、分屏、多文件和 .vimrc 配置。