在Linux系统中,vi是最经典也最必不可少的文本编辑工具。它通常随发行版默认安装,即使是最精简的服务器镜像也会保留vi,用来在纯命令行环境下修改配置文件、编写脚本或查看日志。理解vi的核心在于它本质上是一个模式化编辑器,不同于Windows里记事本那样打开就能直接打字,vi要求用户在不同模式间切换来完成查看、写入和保存动作。

一、vi的三种基础模式与切换逻辑
vi启动后默认处于命令模式,此时键盘输入的大部分字符都被解释为编辑指令而非文本内容。比如按下dd会删除整行,yy复制一行,p粘贴到光标下方。这种设计的初衷是为了让双手无需离开主键盘区就能完成高效操作,但也正是新手觉得难用的原因。只有明确进入插入模式,才能像普通编辑器一样输入字符。
从命令模式进入插入模式有多种方式:按i在光标前插入,a在光标后插入,o在下方新建一行并插入,O在上方新建一行。插入模式下左下角通常会显示“-- INSERT --”提示。写完后必须按Esc回到命令模式,才能执行保存或退出。若直接断电或误敲指令,可能导致文件状态异常。
末行模式(也叫底线命令模式)在命令模式下输入冒号:触发,此时光标跳到屏幕底部,可输入w保存、q退出、wq保存并退出、q!强制不保存退出。当文件只读或没有写权限时,普通wq会失败,必须用w!或q!处理。理解这三层模式循环,是顺畅使用vi的前提。
二、文件打开、编辑与保存的完整操作流程
实际工作中最常见的场景是用vi修改Nginx或SSH的配置文件。假设要编辑/etc/ssh/sshd_config,在终端输入vi /etc/ssh/sshd_config后回车,若文件存在则载入,不存在则创建空白缓冲。打开后先用方向键或h j k l移动光标到需要修改的行,例如找到PermitRootLogin这一行。
将光标移到对应位置后按i进入插入模式,把yes改为no,按Esc返回命令模式。如果想快速跳到文件末尾,可在命令模式输入G,跳到首行用gg。修改完成后,输入:wq保存退出;若只是查看并未改动,用:q即可。当系统提示“E37: No write since last change”说明有改动未存,用:q!可丢弃改动强退。
下面是一段在终端操作的简单示例,展示如何用vi新建脚本并保存:
# 新建一个测试脚本 vi hello.sh # 进入后按 i,输入以下内容 echo "Hello Linux vi" # 按 Esc,再输入 :wq 回车 # 之后赋予执行权限并运行 chmod +x hello.sh ./hello.sh
这种流程在批量部署服务器时极为频繁。相比图形编辑器,vi不依赖桌面环境,通过SSH会话就能完成,且资源占用极低。缺点是学习曲线陡,但一旦熟练,编辑效率反而超过多数鼠标操作的编辑器。
三、常见误区与vim的增强差异
一个广泛存在的误区是认为vi打开文件后直接敲键盘就能输入文字。结果打出满屏j、k等字符或触发删除,搞乱了原文件。根本原因是没分清命令模式和插入模式。建议新手每次打开文件先确认左下角状态,没显示INSERT就先按i再写。
另一个误区是忘记强制退出的写法。当用普通用户编辑/etc下文件却无权限保存时,一直按:wq会循环报错。此时应:q!退出,再用sudo vi重新打开。还有人用Ctrl+z挂起vi导致进程残留,正确做法是用:q系列指令结束。
许多Linux发行版里vi其实是vim(Vi IMproved)的软链接。vim支持语法高亮、多级撤销、区块选择等。可在命令模式输入:version查看。若系统只有原始vi,可用apt install vim或yum install vim增强。下例展示vim中开启行号:
# 在末行模式执行 :set number # 取消行号 :set nonumber
掌握vi不仅是为了应付没有图形的服务器,也是理解Unix哲学中“小工具组合”的一环。把vi和grep、sed等配合,能在远程维护时快速定位并修改问题,不必下载文件到本地再传回。从模式认知到强制退出,每一步都值得在测试环境多敲几遍,形成肌肉记忆。
Linuxvi_commandtext_editor修改时间:2026-08-15 18:36:32