🚀 Vim 文本编辑器指南
Vim 是由经典的 Vi 编辑器发展演变而来的一个强大、高效的文本编辑器。它因其独特的多模式操作和高度可定制性,成为了 Linux 环境下乃至跨平台程序开发的默认首选工具。许多人习惯将 Vim 简称为 Vi,但实际上 Vim 在 Vi 的基础上增加了诸多增强功能,例如更强大的正则表达式查找、多窗口/多标签页编辑、可视化模式、以及丰富的插件生态等,极大地提升了工作效率。
🌟 注意事项:
- 大多数 Linux 发行版默认会安装
vi
编辑器。
- 然而,为了获得 Vim 更加强大的功能和更舒适的体验,强烈建议您手动安装 Vim。
安装 Vim 的命令:
# 对于基于 Debian/Ubuntu 的系统
sudo apt update
sudo apt install vim
# 对于基于 Red Hat/CentOS/Fedora 的系统
sudo yum install vim # 旧版
sudo dnf install vim # 新版
🎯 Vim 的核心模式说明
Vim 的高效操作离不开其独特的三种主要工作模式。理解并熟练切换这些模式是掌握 Vim 的基础。
1. ⚙️ 命令模式 (Normal Mode)
- 默认模式:当您打开 Vim 文件时,Vim 默认就处于此模式。
- 用途:在此模式下,您的按键不会直接输入文本,而是被解释为命令。这些命令用于执行各种编辑操作,如移动光标、删除、复制、粘贴、查找、替换等。
- 光标移动:
- 使用方向键
↑ ↓ ← →
。
- 更高效地使用
h
(左), j
(下), k
(上), l
(右)。
- 其他:
w
(下一单词), b
(上一单词), 0
(行首), $
(行尾), gg
(文件顶部), G
(文件底部) 等。
- 退出/切换:按
Esc
键始终可以从其他模式返回到命令模式。
2. 🖋️ 插入模式 (Insert Mode)
- 用途:在此模式下,Vim 行为与常规文本编辑器(如 Windows 记事本)相似,您输入的任何字符都会直接插入到文件中。
- 进入方式:在命令模式下使用以下快捷键进入。
- 退出方式:按
Esc
键返回命令模式。
- 常用快捷键及其功能:
快捷键 | 功能描述 |
i | 在当前光标位置之前插入文本。 |
I | 在当前行的行首(第一个非空白字符处)插入文本。 |
a | 在当前光标位置之后插入文本。 |
A | 在当前行的行尾插入文本。 |
o | 在当前行的下方新增一行并进入插入模式。 |
O | 在当前行的上方新增一行并进入插入模式。 |
3. 💬 编辑模式 (Ex/Last Line Mode)
- 用途:此模式主要用于执行复杂或跨文件行的操作,如保存、退出、查找、替换、文件管理等。
- 进入方式:在命令模式下,按冒号
:
键。此时,Vim 窗口左下角会出现 :
提示符,等待您输入命令。
- 退出方式:
- 在输入命令后按
Enter
执行,执行完毕后自动返回命令模式。
- 如果只按了
:
而未输入命令,按 Esc
键可返回命令模式。
- 温馨提示:如果对当前模式不确定,多按几下
Esc
键总能回到命令模式。
🚀 Vim 的使用流程与核心操作
1. 打开文件 📁
要用 Vim 打开一个文件,只需在终端中输入 vim
命令,后跟文件名:
vim test.c
- 如果
test.c
存在,Vim 会打开它。
- 如果
test.c
不存在,Vim 会创建一个新文件,并在您第一次保存时写入磁盘。
- 默认进入 命令模式。底部会显示文件信息(如文件名、总行数、字符数、光标位置等)。
2. 编辑文件 ✏️
(1)查找文本 🔍
在命令模式下执行以下操作:
💡 注意事项:
- 查找区分大小写 (
shenchao
和 ShenChao
被视为不同)。
- 忽略大小写设置:进入编辑模式,输入
:set ic
(ignorecase),按回车。
- 恢复大小写敏感:进入编辑模式,输入
:set noic
(noignorecase),按回车。
- 如果查找内容包含特殊字符(如
$
、.
、*
等正则表达式元字符),需要使用反斜杠 \
进行转义。例如,查找 10$
应输入 /10\$
。
快捷键 | 功能描述 |
/text | 从当前光标位置向前(向下)查找 text 。 |
?text | 从当前光标位置向后(向上)查找 text 。 |
/^text | 查找以 text 开头的行。 |
/text$ | 查找以 text 结尾的行。 |
n | 在同一方向重复上一次查找(例如,如果上次是 /text ,则继续向下查找)。 |
N | 在反方向重复上一次查找(例如,如果上次是 /text ,则向上查找)。 |
* | 查找光标下的完整单词,向前(向下)查找。 |
# | 查找光标下的完整单词,向后(向上)查找。 |
(2)替换文本 🔄
在命令模式下执行以下操作:
命令 | 功能描述 |
r | 替换光标所在字符。按下 r 后,再输入一个字符,Vim 会将光标下的字符替换为新输入的字符。 |
R | 进入“替换模式”(Replace Mode)。从光标处开始,您输入的所有字符都会覆盖现有字符,直到按下 Esc 退出。 |
:s/old/new/g | 替换当前行所有 old 为 new 。s 代表 substitute ,g 代表 global (全局替换)。 |
:n1,n2s/old/new/g | 替换 n1 行到 n2 行之间 所有 old 为 new 。 |
:%s/old/new/g | 替换整个文件内所有 old 为 new 。% 代表整个文件。 |
:%s/old/new/gc | 替换整个文件内所有 old 为 new ,并进行逐一确认 (c 代表 confirm )。 |
:%s/old/new/gn | 统计整个文件内有多少 old 可以被替换为 new ,但不执行替换 (n 代表 number )。 |
(3)删除文本 🗑️
在命令模式下执行以下操作:
💡 注意事项:Vim 中的删除操作实际上是剪切。删除的内容会被存入剪贴板(或称为寄存器),因此可以使用 p
或 P
命令进行粘贴。
快捷键 | 功能描述 |
x | 删除光标所在的一个字符。 |
X | 删除光标前的一个字符。 |
dw | 删除从光标处到当前单词结尾的字符。 |
d$ | 删除从当前光标位置到行尾的字符。 |
dd | 删除当前整行。 |
ndd | 删除从当前行开始的n 行(例如 5dd 删除当前行和接下来的 4 行)。 |
dG | 删除从当前行到文件末尾的所有行。 |
D | 等同于 d$ ,删除从当前光标位置到行尾的字符。 |
:a1,a2d | 删除从 a1 行到 a2 行 的所有内容。 |
(4)复制 & 粘贴 📋
在命令模式下执行以下操作:
💡 注意事项:Vim 的复制和粘贴是基于寄存器的。y
(yank) 命令会将内容复制到默认寄存器中。
快捷键 | 功能描述 |
yy | 复制当前整行。 |
nyy | 复制从当前行开始的n 行。 |
yw | 复制从光标处到当前单词结尾的内容。 |
y$ | 复制从当前光标位置到行尾的内容。 |
p | 将剪贴板中的内容粘贴到光标之后(或当前行下方)。 |
P | 将剪贴板中的内容粘贴到光标之前(或当前行上方)。 |
v / V / Ctrl+v | 进入可视化模式(Visual Mode),用于选择文本。v (字符), V (行), Ctrl+v (块)。选择后按 y 复制或 d 删除。 |
3. 保存 & 退出 💾➡️🚪
在编辑模式下,输入以下命令:
⚠️ 特别注意:
:w!
和 :wq!
可以在当前用户无写入权限的情况下尝试以更高权限(如果当前终端是 sudo
或 root
)强制保存。但请谨慎使用,确保您理解其含义。
- 如果文件被其他程序锁定或只读,强制保存可能不成功。
命令 | 功能描述 |
:wq | 保存文件并退出 Vim。 |
:wq! | 强制保存文件并退出 Vim(当您可能没有写入权限时尝试)。 |
:x | 类似于 :wq ,但仅在文件有修改时保存。 |
:q | 退出 Vim(如果文件有修改但未保存,Vim 会发出警告)。 |
:q! | 强制退出 Vim,不保存任何修改。 |
:w | 仅保存文件,不退出 Vim。 |
:w! | 强制保存文件,不退出 Vim。 |
:w filename | 将当前文件另存为 filename 。 |
ZZ | 在命令模式下,等同于 :wq 。 |
ZQ | 在命令模式下,等同于 :q! 。 |
4. 其他常用操作 ✨
在命令模式下执行以下操作:
快捷键 | 功能描述 |
J | 连接当前行和下一行。将下一行内容连接到当前行末尾,并删除中间的换行符。 |
u | 撤销上一次操作。您可以多次按 u 来撤销之前的多个操作。 |
Ctrl + r | 反撤销(Redo)。撤销 u 命令本身,恢复被撤销的操作。 |
. | 重复上一次的命令操作。例如,如果您 dd 删除了一行,再按 . 就会再次删除一行。 |
Ctrl + g | 显示当前文件信息,如文件名、行号、列号、文件路径,以及文件修改状态。 |