vi编辑器命令模式是Linux和Unix系统中最为核心和强大的文本编辑模式之一,它以其高效的操作方式和高度的可定制性深受开发者和系统管理员的喜爱,要熟练掌握vi编辑器,首先必须深刻理解其三种基本工作模式:命令模式(Command Mode)、插入模式(Insert Mode)和末行模式(Last Line Mode),命令模式是所有操作的起点和枢纽,用户在启动vi编辑器后,默认进入的就是命令模式,在此模式下,键盘的每一个输入都被视为一条命令,用于控制光标的移动、文本的删除、复制、粘贴以及切换到其他模式等,而非直接输入文本内容,掌握命令模式的各种命令,是高效使用vi编辑器的关键。

vi编辑器命令模式的核心功能可以大致划分为光标移动、文本删除、文本复制与粘贴、文本替换与修改以及其他高级操作等几个方面。
光标移动命令
光标移动是进行任何文本编辑操作的前提,vi编辑器提供了丰富而精确的光标移动命令,使用户能够快速定位到文本的任意位置。
-
基本字符移动:
(图片来源网络,侵删)h:光标向左移动一个字符。l(小写L):光标向右移动一个字符。j:光标向下移动一行。k:光标向上移动一行。 这四个命令是vi中最基本的光标移动方式,类似于键盘上的方向键(但无需离开主键区)。
-
按单词移动:
w(word forward):光标移动到下一个单词的开头。e(end of word):光标移动到当前单词的末尾,或下一个单词的末尾。b(word backward):光标移动到当前单词的开头,或上一个单词的开头。 这里的“单词”通常由字母、数字和下划线组成。
-
按行移动:
0(数字零):光标移动到当前行的行首。- 光标移动到当前行的行尾。
^:光标移动到当前行的第一个非空白字符。G:光标移动到文件的最后一行。nG(5G):光标移动到文件的第n行,如果省略n,则默认为G,即最后一行。gg:光标移动到文件的第一行,等同于1G。
-
屏幕滚动移动:
Ctrl + f(forward):屏幕向下滚动一页(相当于Page Down)。Ctrl + b(backward):屏幕向上滚动一页(相当于Page Up)。Ctrl + d(down):屏幕向下滚动半页。Ctrl + u(up):屏幕向上滚动半页。H(Head):光标移动到当前屏幕的第一行。M(Middle):光标移动到当前屏幕的中间行。L(Last):光标移动到当前屏幕的最后一行。
文本删除命令

删除操作是命令模式中最常用的操作之一,vi的删除命令通常与光标移动命令结合使用,可以实现精确的删除范围。
-
基本删除:
x:删除光标所在处的字符。X(大写X):删除光标前面的一个字符(相当于Backspace)。dd:删除当前整行,如果前面加上数字,例如3dd,则删除从当前行开始的3行。
-
按范围删除:
d配合光标移动命令,可以删除从光标当前位置到移动目标位置之间的文本。dw:删除从光标位置到下一个单词开头的所有内容(包括当前单词的剩余部分)。de:删除从光标位置到当前单词末尾的所有内容。d$或D:删除从光标位置到行尾的所有内容。d0:删除从光标位置到行首的所有内容(注意是数字0,不是字母O)。d^:删除从光标位置到行首第一个非空白字符的所有内容。dG:删除从当前行到文件末尾的所有内容。dgg:删除从当前行到文件开头的第一行的所有内容。ndw或nde:删除n个单词。
文本复制与粘贴命令
vi编辑器使用“寄存器”(Register)来暂存被删除或复制的文本,这与其他编辑器的“剪贴板”概念类似。
-
复制命令 (yank, y):
yy:复制当前整行到默认寄存器,同样,5yy表示复制从当前行开始的5行。y配合光标移动命令,可以复制从光标当前位置到移动目标位置之间的文本。yw:复制一个单词。ye:复制到单词末尾。y$或Y:复制到行尾。y0:复制到行首。y^:复制到行首第一个非空白字符。yG:复制从当前行到文件末尾的所有内容。ygg:复制从当前行到文件开头的第一行的所有内容。
-
粘贴命令 (put, p):
p(put):将默认寄存器中的内容粘贴到光标的后面,如果复制的是整行,则粘贴在当前行的下一行;如果复制的是字符或部分文本,则粘贴在光标之后。P(大写P):将默认寄存器中的内容粘贴到光标的前面,如果复制的是整行,则粘贴在当前行的上一行;如果复制的是字符或部分文本,则粘贴在光标之前。
-
删除与复制的结合:
d、x等删除命令会将删除的内容自动放入默认寄存器,因此删除后可以直接使用p或P进行粘贴,这实际上实现了“剪切”的功能。
文本替换与修改命令
这些命令允许在命令模式下直接对文本进行修改,通常修改后会自动进入插入模式。
-
替换字符:
r(replace):替换光标所在处的字符,按下r后,再按下一个字符,该字符将替换光标处的字符,并保持在命令模式。R(replace mode):进入替换模式,连续输入的字符将依次替换光标后的字符,直到按下Esc键返回命令模式。
-
修改文本:
s(substitute):删除光标所在处的字符,并进入插入模式。S或cC:删除当前整行,并进入插入模式。c(change)配合光标移动命令,可以修改从光标当前位置到移动目标位置之间的文本,修改后进入插入模式。cw:修改一个单词(从光标处到单词末尾)。c$或C:修改到行尾。c0:修改到行首。c^:修改到行首第一个非空白字符。cgg:修改从当前行到文件开头。cG:修改从当前行到文件末尾。
其他重要命令
-
撤销与重做:
u(undo):撤销上一次的操作,可以连续按u进行多次撤销。Ctrl + r(redo):重做被撤销的操作。
-
重复操作:
- (句点):重复执行上一次的命令,执行了
dd删除一行后,按会再删除一行;执行了iw插入一个单词后,按会在光标处再插入一个相同的单词。
- (句点):重复执行上一次的命令,执行了
-
进入插入模式:
i(insert):在光标前进入插入模式。a(append):在光标后进入插入模式。o(open line below):在当前行下方插入一个新行,并进入插入模式。O(open line above):在当前行上方插入一个新行,并进入插入模式。I(大写I):在当前行的行首(第一个非空白字符前)进入插入模式。A(大写A):在当前行的行尾进入插入模式。
-
退出vi编辑器:
- 在命令模式下,按进入末行模式,然后输入:
w(write):保存文件但不退出。q(quit):退出文件,如果文件未修改,可以直接退出;如果已修改,会提示警告。wq或x:保存文件并退出。q!(quit forced):强制退出文件,不保存任何修改。
- 在命令模式下,按进入末行模式,然后输入:
为了更直观地展示部分常用命令,以下是一个简明的表格:
| 命令分类 | 命令 | 功能描述 |
|---|---|---|
| 光标移动 | h, j, k, l |
左,下,上,右移动一个字符/行 |
w, e, b |
按单词移动(到首,到尾,到前一首) | |
0, $, ^ |
到行首,行尾,行首非空白字符 | |
G, gg |
到文件尾,文件首 | |
| 文本删除 | x, X |
删除光标处/前一个字符 |
dd |
删除当前行 | |
dw, de, d$ |
删除一个单词,到单词尾,到行尾 | |
| 文本复制 | yy |
复制当前行 |
yw, ye, y$ |
复制一个单词,到单词尾,到行尾 | |
| 文本粘贴 | p, P |
在光标后/前粘贴 |
| 文本修改 | r, R |
替换光标处字符,进入替换模式 |
s, S |
替换光标处字符,替换当前行 | |
cw, c$ |
修改一个单词,修改到行尾 | |
| 撤销与重做 | u, Ctrl+r |
撤销,重做 |
| 重复操作 | 重复上一次命令 | |
| 模式切换 | i, a, o, O |
进入插入模式(光标前/后/下/上行) |
| 退出编辑器 | w, :q, :wq, :q! |
保存,退出,保存并退出,强制退出 |
熟练掌握vi编辑器命令模式,需要大量的练习,初学者可能会觉得命令繁多且不易记忆,但一旦形成肌肉记忆,其操作效率将远超图形界面编辑器,理解命令的逻辑和组合方式(例如d+移动命令=删除范围,c+移动命令=修改范围)是快速上手的关键,命令模式的核心思想是通过简洁的按键组合完成复杂的文本操作,这正是vi编辑器经久不衰的魅力所在。
相关问答FAQs
问题1:vi编辑器中,如何快速删除从当前光标位置到文件末尾的所有内容?
解答:在命令模式下,将光标移动到想要开始删除的位置,然后按下dG组合键。d是删除命令,G是跳转到文件末尾的命令,两者结合即可删除从当前光标到文件末尾的所有文本,如果误删,可以立即按u键撤销。
问题2:在vi编辑器中,如何复制多行文本并将其粘贴到指定位置?
解答:假设要复制从第3行到第5行的内容,并粘贴到第10行之后,操作步骤如下:
- 在命令模式下,输入
3G按回车,光标跳转到第3行。 - 输入
5yy(或2yy,因为从第3行开始复制2行就是到第5行),此时第3到第5行内容被复制到默认寄存器。 - 输入
10G按回车,光标跳转到第10行。 - 按下
p键,复制的3行内容将粘贴在第10行的下方,如果想在第10行的上方粘贴,则使用P键,如果需要指定寄存器进行复制(例如避免覆盖默认寄存器内容),可以使用"a3yy复制到寄存器a,然后粘贴时使用"ap。
