在 CentOS 7.0 系统中,vi(或其增强版 vim)是默认安装的文本编辑器,它以其强大的功能、高效的编辑能力和极低的资源消耗而闻名,是系统管理员和开发者的必备工具,尽管初学者可能会觉得它的学习曲线有些陡峭,但一旦掌握了其核心操作模式,就能体验到无与伦比的编辑效率,本文将系统地介绍 vi 命令在 CentOS 7.0 环境下的使用方法,从基础入门到高效操作,帮助您快速上手。

核心概念:理解 vi 的三种模式
vi 的强大之处在于其独特的设计理念,它将编辑操作分为不同的模式,理解并熟练切换这些模式是掌握 vi 的关键。
- 
命令模式 这是
vi启动后的默认模式,在此模式下,您输入的任何字符都被视为一个命令,而不是插入到文本中的内容。h,j,k,l用于移动光标,x用于删除字符,dd用于删除整行。 - 
插入模式 在此模式下,您可以像使用普通记事本一样输入文本,从命令模式进入插入模式有多种方式,最常用的是按
i(在光标前插入)或a(在光标后插入),按下Esc键可以从插入模式返回到命令模式。 - 
末行模式 也称为 ex 模式,在命令模式下按下冒号 键即可进入此模式,光标会移动到屏幕底部,您可以输入诸如保存(
w)、退出(q)、搜索()、替换(s)等更复杂的命令,执行完命令后,按Enter键会自动返回命令模式。 
模式切换关系图:
+----------------+      按 `i`, `a`, `o` 等      +----------------+
|   命令模式     |  ------------------------->  |   插入模式     |
| (Command Mode) | <-------------------------  | (Insert Mode)  |
+----------------+        按 `Esc` 键           +----------------+
        |
        | 按 `:` 键
        v
+----------------+
|   末行模式     |
| (Last Line Mode)|
+----------------+
基本操作:启动、保存与退出
这是每个 vi 新手必须掌握的第一步。
- 
启动
vi:
vi filename:打开或创建名为filename的文件,如果文件不存在,则在保存时会创建。vi:不指定文件名,直接打开一个空白缓冲区,退出时需要指定文件名。
 - 
保存与退出(在末行模式下操作):
w:保存文件,但不退出。w filename:将当前内容另存为filename。q:退出vi,如果文件已被修改但未保存,则会提示错误。wq或x:保存文件并退出,这是最常用的组合命令。q!:强制退出,不保存对文件所做的任何修改,当您想放弃所有更改时非常有用。
 
高效编辑:光标移动与文本操作
在命令模式下,vi 提供了丰富的光标移动和文本编辑命令,让双手无需离开键盘主键区即可完成所有操作。
光标移动命令
| 命令 | 功能 | 说明 | 
|---|---|---|
h | 
左移一格 | 等同于方向键左 | 
j | 
下移一行 | 等同于方向键下 | 
k | 
上移一行 | 等同于方向键上 | 
l | 
右移一格 | 等同于方向键右 | 
w | 
移动到下一个单词的开头 | Word | 
b | 
移动到上一个单词的开头 | Back | 
0 | 
移动到行首 | 数字零 | 
^ | 
移动到本行第一个非空字符 | |
| 移动到行尾 | ||
gg | 
移动到文件第一行 | |
G | 
移动到文件最后一行 | |
Ctrl + f | 
向下翻一页 | Forward | 
Ctrl + b | 
向上翻一页 | Backward | 
文本编辑命令
| 命令 | 功能 | 说明 | 
|---|---|---|
i | 
在光标前插入 | Insert | 
a | 
在光标后插入 | Append | 
o | 
在当前行下方新开一行并进入插入模式 | |
x | 
删除光标所在处的字符 | |
dd | 
删除光标所在行 | |
dw | 
删除从光标处到下一个单词开头的内容 | Delete Word | 
yy | 
复制光标所在行 | Yank | 
p | 
在光标下方粘贴 | Paste | 
P | 
在光标上方粘贴 | |
u | 
撤销上一步操作 | Undo | 
Ctrl + r | 
重做(撤销的撤销) | Redo | 
高级功能:搜索与替换
vi 的搜索和替换功能非常强大,尤其适合处理大型配置文件或代码。
- 
搜索(在命令模式下操作):
/pattern:从光标位置向下搜索字符串pattern。?pattern:从光标位置向上搜索字符串pattern。n:重复上一次的搜索,方向相同。N:重复上一次的搜索,方向相反。
 - 
替换(在末行模式下操作):
s/old/new/:将当前行第一个old替换为new。s/old/new/g:将当前行所有的old替换为new。%s/old/new/g:将整个文件中所有的old替换为new,这是最常用的全局替换命令。%s/old/new/gc:在替换前逐个询问用户是否确认(c代表 confirm)。
 
实践演练:一个完整的工作流程
假设我们需要在 CentOS 7.0 中创建一个名为 test.conf 的配置文件。
- 打开文件:在终端中输入 
vi test.conf并回车,此时进入vi的命令模式,屏幕为空。 - 进入插入模式:按下 
i键,屏幕左下角会显示-- INSERT --,表示已进入插入模式。 - :
# This is a test configuration file. server_name = myserver port = 8080 - 发现错误:假设我们发现端口号应该是 
9090而不是8080。 - 返回命令模式:按下 
Esc键。 - 移动光标:使用方向键或 
j键将光标移动到port = 8080这一行。 - 删除并修改:
- 按下 
0将光标移动到行首。 - 按下 
f8(查找字符'8')将光标移动到'8'上。 - 按下 
2x删除两个数字'80'。 - 按下 
i进入插入模式,输入90。 
 - 按下 
 - 保存并退出:按下 
Esc确保在命令模式,然后输入wq并回车。 
至此,您已经成功使用 vi 完成了一次完整的编辑任务,熟练掌握这些基础和进阶命令,将使您在 CentOS 7.0 的命令行环境中如鱼得水。

相关问答FAQs
问题1:我在 vi 里做了很多修改,但我想放弃所有修改并直接退出,应该怎么办?
解答: 这是一个非常常见的情况,如果您想不保存任何更改而强制退出 vi,请按照以下步骤操作:
- 确保您处于命令模式(如果不在,请按 
Esc键)。 - 输入冒号 进入末行模式。
 - 在底部的命令行中输入 
q!并按Enter键。 这里的q代表退出,而 是强制操作符,它会忽略所有未保存的修改,直接关闭编辑器。 
问题2:在编辑一个很长的脚本或配置文件时,我希望能显示行号以便定位,该如何开启?
解答: 在 vi 中开启行号显示非常简单,这同样是在末行模式下完成的。
- 按下 
Esc键确保处于命令模式。 - 输入冒号 进入末行模式。
 - 输入 
set number或其简写形式set nu,然后按Enter键,屏幕左侧就会立即显示行号。 这个设置是临时的,仅在当前这次vi会话中有效,如果您希望每次打开vi都默认显示行号,可以在您的主目录下创建一个名为.vimrc的文件(如果使用的是vi而非vim,则为.exrc),并在文件中添加set number这一行,这样设置就会永久生效。