前言

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 最重要的特点是“模式编辑”。常用模式有下面几种:

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

最常用的流程可以记成:

1
普通模式 -> 按 i -> 插入模式 -> 输入内容 -> 按 Esc -> 普通模式 -> 输入 :wq 保存退出

四、最重要的保存和退出

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

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

刚开始最常用的是:

1
:wq

如果改乱了,不想保存:

1
:q!

五、进入插入模式

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

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

最开始只记两个就够:

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

六、移动光标

Vim 中可以用方向键移动,也可以用 hjkl 移动:

按键 方向
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

如果误删了一行,可以按:

1
u

八、复制、剪切和粘贴

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

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

例如复制当前行并粘贴到下一行:

1
2
yy
p

剪切当前行并粘贴到其他位置:

1
2
3
dd
移动光标
p

九、可视模式选择文本

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

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

如果想复制一整段内容:

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

十、查找和替换

1. 查找文本

向下查找:

1
/关键词

向上查找:

1
?关键词

查找后继续跳转:

功能 命令
下一个匹配 n
上一个匹配 N

2. 替换文本

替换当前行第一个匹配:

1
:s/旧内容/新内容/

替换当前行所有匹配:

1
:s/旧内容/新内容/g

替换全文所有匹配:

1
:%s/旧内容/新内容/g

替换全文并逐个确认:

1
:%s/旧内容/新内容/gc

其中:

  • % 表示全文。
  • s 表示 substitute,也就是替换。
  • g 表示当前行内所有匹配项。
  • c 表示 confirm,每次替换前确认。

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

在 Vim 中可以临时开启行号:

1
:set number

关闭行号:

1
:set nonumber

开启搜索高亮:

1
:set hlsearch

关闭搜索高亮:

1
:nohlsearch

开启自动缩进:

1
:set autoindent

显示当前文件名和状态:

1
:f

十二、编辑多个文件

一次打开多个文件:

1
vim file1.txt file2.txt

查看缓冲区列表:

1
:ls

切换到下一个文件:

1
:bn

切换到上一个文件:

1
:bp

打开另一个文件:

1
:e another.txt

保存全部文件:

1
:wa

退出全部文件:

1
:qa

保存并退出全部文件:

1
:wqa

十三、分屏编辑

横向分屏打开文件:

1
:split file.txt

也可以简写:

1
:sp file.txt

纵向分屏打开文件:

1
:vsplit file.txt

也可以简写:

1
: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 提示文件已改变,可以输入:

1
: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 即可生效。

如果不想使用鼠标,可以删除:

1
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 的学习重点不是一次记住所有快捷键,而是先建立“模式”的概念:

1
普通模式负责操作,插入模式负责输入,命令模式负责保存退出和高级命令。

新手最先需要掌握的是:

  • i:进入编辑。
  • Esc:回到普通模式。
  • :wq:保存退出。
  • :q!:放弃修改退出。
  • ddyypu:完成基础编辑。

等这些命令用熟之后,再逐渐学习查找替换、分屏、多文件和 .vimrc 配置,Vim 就会从“容易退出不了的编辑器”变成一个非常顺手的终端工具。