vi是Linux系统中历史悠久且应用广泛的文本编辑器,几乎所有Linux发行版都默认内置了该工具,它不需要图形界面支持,通过命令行就能完成各类文本文件的编辑工作,非常适合服务器环境下的文件修改操作。

vi的三种工作模式
vi编辑器有三种核心工作模式,不同模式下可执行的操作不同,理解模式切换是使用vi的基础:
- 命令模式:启动vi后默认进入的模式,该模式下无法直接输入文本,只能执行复制、粘贴、删除、跳转等命令操作。
- 插入模式:该模式下可以像普通文本编辑器一样输入、修改文本内容,需要按特定快捷键从命令模式切换进入。
- 末行模式:在命令模式下输入冒号
:即可进入,该模式可以执行保存文件、退出编辑器、查找替换、设置编辑器参数等操作。
启动vi编辑器
在Linux终端中输入vi命令加上要编辑的文件路径即可启动vi并打开对应文件,如果文件不存在,vi会在保存时自动创建该文件。
# 打开当前目录下的test.txt文件,如果文件不存在则创建 vi test.txt # 打开/etc/nginx/nginx.conf配置文件 vi /etc/nginx/nginx.conf
模式切换方法
命令模式切换到插入模式
在命令模式下按下以下按键可以进入插入模式,不同按键对应不同的插入位置:
i:在当前光标位置前开始插入文本a:在当前光标位置后开始插入文本o:在当前光标所在行的下方新开一行并进入插入模式I:跳转到当前行的行首并进入插入模式A:跳转到当前行的行尾并进入插入模式O:在当前光标所在行的上方新开一行并进入插入模式
插入模式/末行模式切换到命令模式
在插入模式下按下Esc键即可回到命令模式;在末行模式下按下Esc键或者执行完末行命令后,也会自动回到命令模式。
命令模式切换到末行模式
在命令模式下直接按下:键,终端底部会出现冒号提示符,此时就进入了末行模式,可以输入对应的末行命令。
常用操作命令
命令模式下的常用操作
光标移动
h:光标向左移动一个字符j:光标向下移动一行k:光标向上移动一行l:光标向右移动一个字符0:光标移动到当前行的行首$:光标移动到当前行的行尾gg:光标移动到文件的第一行G:光标移动到文件的最后一行nG:光标移动到文件的第n行,比如5G就是移动到第5行
文本编辑操作
x:删除当前光标所在位置的字符dd:删除当前光标所在的整行ndd:删除从当前行开始的n行,比如3dd删除当前行及下方2行共3行yy:复制当前光标所在的整行nyy:复制从当前行开始的n行p:将复制或删除的内容粘贴到当前光标所在行的下方P:将复制或删除的内容粘贴到当前光标所在行的上方u:撤销上一步操作Ctrl + r:重做被撤销的操作
末行模式下的常用操作
:w:保存当前编辑的文件,不退出vi:w 文件名:将当前编辑的内容另存为指定的文件名:q:退出vi编辑器,如果文件有未保存的修改会提示无法退出:q!:强制退出vi编辑器,不保存任何修改:wq:保存当前文件并退出vi编辑器:set nu:显示文件的行号:set nonu:取消显示文件的行号/关键词:在文件中向下查找指定的关键词,按n跳转到下一个匹配位置,按N跳转到上一个匹配位置?关键词:在文件中向上查找指定的关键词,跳转逻辑和/查找一致:s/old/new/g:将当前行中所有的old字符串替换为new字符串:%s/old/new/g:将整个文件中所有的old字符串替换为new字符串
完整使用示例
以下是一个使用vi创建并编辑新文件的完整流程示例:
# 1. 启动vi创建test.txt文件 vi test.txt # 2. 此时进入命令模式,按下i键进入插入模式,输入以下内容 Hello Linux vi Editor This is a test file Learn vi basic operations # 3. 按下Esc键回到命令模式,按下:进入末行模式,输入set nu显示行号 :set nu # 4. 再次回到命令模式,按下3G跳转到第3行,按下dd删除第3行 # 5. 按下yy复制当前行,按下p粘贴到当前行下方 # 6. 回到命令模式,按下:进入末行模式,输入wq保存并退出 :wq
常见问题处理
如果编辑文件时意外断开了终端连接,再次打开文件时可能会出现交换文件报错,此时可以选择以下操作:
- 按下
D键删除交换文件,恢复编辑 - 按下
R键恢复未保存的修改内容 - 按下
Q键退出,不恢复修改
如果是误操作导致文件内容被修改,可以在命令模式下按下u多次撤销操作,直到恢复到需要的内容状态再保存。