vi/vim 是 Linux/Unix 系统中最常用的文本编辑器,核心分为三种模式:命令模式(Command Mode)、输入模式(Insert Mode) 和 命令行模式(Command-Line Mode)。掌握这三种模式的切换与操作,是高效使用 vi/vim 的基础。
用户启动 vi/vim 后,默认进入命令模式。此模式下,键盘输入会被识别为「命令」(而非文本),例如按 i 不会输入字符,而是切换到输入模式。
| 命令 | 功能描述 |
|---|---|
i | 切换到输入模式,从光标当前位置开始输入文本 |
a | 切换到输入模式,从光标下一个位置开始输入文本 |
o | 切换到输入模式,在当前行下方插入新行 |
O | 切换到输入模式,在当前行上方插入新行 |
x | 删除光标当前所在位置的字符 |
dd | 剪切光标所在的整行 |
yy | 复制光标所在的整行 |
p(小写) | 将剪贴板内容粘贴到光标下方 |
P(大写) | 将剪贴板内容粘贴到光标上方 |
u | 撤销上一次操作 |
Ctrl + r | 重做上一次被撤销的操作 |
: | 切换到命令行模式(在底部输入命令) |
在命令模式下按 i/a/o/O 等键,即可进入输入模式。此模式下可正常输入和编辑文本,左下角会显示 --INSERT-- 提示。
ENTER 键BACK SPACE(删除光标前字符)或 DEL(删除光标后字符)HOME(行首)、END(行尾)、Page Up/Page Down(翻页)ESC 键退出输入模式,返回命令模式在命令模式下按 :(英文冒号),即可进入命令行模式。此模式下需在底部输入命令,按 ENTER 执行,按 ESC 可返回命令模式。
| 命令 | 功能描述 |
|---|---|
:w | 保存当前文件(不退出) |
:q | 退出 vi/vim(需先保存修改,否则报错) |
:q! | 强制退出 vi/vim,不保存修改 |
:wq | 保存文件并退出 vi/vim(常用) |
:w [filename] | 将当前内容另存为指定文件名(如 :w test.txt) |
:r [filename] | 读取指定文件内容,插入到光标所在行下方(如 :r data.txt) |
:set nu | 显示行号 |
:set nonu | 隐藏行号 |
:! [command] | 暂时退出 vi/vim,执行系统命令(如 :! ls 查看当前目录文件) |
以创建并编辑 runoob.txt 文件为例,演示完整流程:
进入命令模式
在终端输入以下命令,启动 vim 并打开(或创建)runoob.txt:
bashvim runoob.txt
此时进入命令模式,无任何输入提示。
切换到输入模式
在命令模式下按 i 键,左下角会显示 --INSERT--,表示进入输入模式。此时可自由输入文本,例如:
Hello, vi/vim! This is a test file.
返回命令模式
输入完成后,按 ESC 键,--INSERT-- 消失,回到命令模式。
保存并退出
在命令模式下按 : 进入命令行模式,输入 wq 并按 ENTER,即可保存文件并退出 vim。
q! 强制退出。命令模式是 vi/vim 的核心,除基础命令外,还有大量提升效率的操作,可分为「光标移动」「搜索替换」「删除复制粘贴」三类。
| 命令 | 功能描述 |
|---|---|
h / ← | 光标向左移动 1 字符 |
j / ↓ | 光标向下移动 1 字符 |
k / ↑ | 光标向上移动 1 字符 |
l / → | 光标向右移动 1 字符 |
Ctrl + f | 屏幕向下滚动 1 页(等同于 Page Down) |
Ctrl + b | 屏幕向上滚动 1 页(等同于 Page Up) |
Ctrl + d | 屏幕向下滚动半页 |
Ctrl + u | 屏幕向上滚动半页 |
0(数字)/ Home | 光标移动到当前行行首 |
$ / End | 光标移动到当前行行尾 |
H | 光标移动到屏幕最上方一行的行首 |
M | 光标移动到屏幕中间一行的行首 |
L | 光标移动到屏幕最下方一行的行首 |
G | 光标移动到文件最后一行 |
nG | 光标移动到文件第 n 行(需先执行 :set nu 显示行号,如 20G 到第 20 行) |
gg | 光标移动到文件第一行(等同于 1G) |
n<Enter> | 光标向下移动 n 行(如 5<Enter> 向下移动 5 行) |
n<space> | 光标向右移动 n 字符(如 10<space> 向右移动 10 字符) |
| 命令 | 功能描述 |
|---|---|
/word | 从光标位置向下搜索字符串 word(如 /vim 搜索 "vim") |
?word | 从光标位置向上搜索字符串 word(如 ?vim 向上搜索 "vim") |
n | 重复上一次搜索动作(向下继续搜索) |
N | 反向重复上一次搜索动作(向上继续搜索) |
:n1,n2s/word1/word2/g | 在第 n1 行到第 n2 行之间,将 word1 替换为 word2(如 :10,20s/old/new/g) |
:%s/word1/word2/g | 从第一行到最后一行,将 word1 替换为 word2(% 代表所有行) |
:%s/word1/word2/gc | 全文件替换,但每次替换前会提示确认(c 代表 confirm) |
| 命令 | 功能描述 |
|---|---|
x | 向后删除 1 字符(等同于 DEL 键) |
X | 向前删除 1 字符(等同于 BACK SPACE 键) |
nx | 向后删除 n 字符(如 5x 删除光标后 5 字符) |
dd | 剪切光标所在整行 |
ndd | 剪切光标所在行及下方共 n 行(如 3dd 剪切 3 行) |
d1G | 剪切光标所在行到第一行的所有内容 |
dG | 剪切光标所在行到最后一行的所有内容 |
d$ | 剪切光标所在位置到行尾的内容 |
d0 | 剪切光标所在位置到行首的内容 |
yy | 复制光标所在整行 |
nyy | 复制光标所在行及下方共 n 行(如 4yy 复制 4 行) |
y1G | 复制光标所在行到第一行的所有内容 |
yG | 复制光标所在行到最后一行的所有内容 |
y$ | 复制光标所在位置到行尾的内容 |
y0 | 复制光标所在位置到行首的内容 |
J | 将光标所在行与下一行合并为一行 |
u | 撤销上一次操作(常用) |
Ctrl + r | 重做上一次被撤销的操作(常用) |
.(小数点) | 重复上一次操作(如删除后按 . 可再次删除,常用) |
除了基础的 i/a/o/O,还有以下切换方式:
| 命令 | 功能描述 |
|---|---|
I | 从当前行第一个非空格字符开始输入(区别于 i 的「光标当前位置」) |
A | 从当前行最后一个字符开始输入(区别于 a 的「光标下一个位置」) |
r | 进入「取代模式」,仅取代光标所在的1个字符(按 ESC 退出) |
R | 进入「持续取代模式」,持续取代光标所在字符,直到按 ESC 退出(左下角显示 --REPLACE--) |
3j(向下移动 3 行)、5dd(剪切 5 行)、10G(跳转到第 10 行)。ZZ(大写),可直接保存并退出(等同于 :wq);按 ZQ(大写),可强制退出不保存(等同于 :q!)。:! [命令],可临时执行系统命令(如 :! pwd 查看当前目录),执行后按 ENTER 返回 vi/vim。:set nu 显示行号,定位更高效;完成后可执行 :set nonu 隐藏行号。本文作者:hwy2580
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!