Linux编辑文件命令vi是Linux系统中最为基础且强大的文本编辑工具之一,其名称源于“visual”的缩写,最初由Bill Joy在1976年开发,作为一款模式化的编辑器,vi通过不同的工作模式实现对文本的编辑、查找、替换等操作,虽然学习曲线较陡峭,但一旦掌握,便能高效完成各种文本处理任务,以下将从基本概念、操作模式、常用命令、高级技巧及注意事项等方面详细介绍vi的使用方法。

vi的基本概念与启动
vi编辑器分为三种主要模式:命令模式(Command Mode)、插入模式(Insert Mode)和末行模式(Last Line Mode),命令模式是vi的默认模式,用于执行光标移动、复制粘贴、删除等操作;插入模式用于直接输入文本;末行模式用于保存文件、退出编辑器以及执行搜索、替换等全局操作,启动vi编辑器的基本命令为vi 文件名,若文件不存在,则创建新文件;若文件已存在,则打开该文件。vi test.txt将打开或创建名为test.txt的文件,并进入命令模式。
vi的操作模式切换
理解三种模式之间的切换是掌握vi的关键,从命令模式进入插入模式,可通过以下按键实现:
i:在光标当前位置插入文本;a:在光标后一个位置插入文本;o:在当前行下方插入新行并进入插入模式;O:在当前行上方插入新行并进入插入模式;I:在当前行首插入文本;A:在当前行尾插入文本。
从插入模式返回命令模式,需按下Esc键,从命令模式进入末行模式,需输入(冒号),此时vi底部会出现命令行提示,输入相应命令后按回车执行。w保存文件,q退出编辑器,wq保存并退出。
命令模式下的常用操作
命令模式是vi的核心操作模式,以下为常用命令及其功能:

光标移动
h:光标左移一个字符;j:光标下移一行;k:光标上移一行;l:光标右移一个字符;w:光标移动到下一个单词首部;b:光标移动到上一个单词首部;e:光标移动到当前单词尾部;0(数字零):光标移动到当前行首;- 光标移动到当前行尾;
gg:光标移动到文件首部;G:光标移动到文件尾部;nG(n为数字):光标移动到第n行。
文本删除与修改
x:删除光标所在位置的字符;nx(n为数字):删除从光标开始的n个字符;dd:删除当前行;ndd(n为数字):删除当前行及后续n-1行;d$:删除从光标到行尾的内容;d^:删除从光标到行首的内容;dw:删除一个单词;D:删除从光标到行尾的内容(等同于d$)。
复制与粘贴
yy:复制当前行;nyy(n为数字):复制当前行及后续n-1行;yw:复制一个单词;p:在光标后粘贴复制的文本;P:在光标前粘贴复制的文本。
撤销与重做
u:撤销上一步操作;Ctrl + r:重做被撤销的操作。
末行模式下的常用命令
末行模式主要用于文件保存、退出及全局操作,常用命令如下:
| 命令 | 功能说明 |
|---|---|
w |
保存当前文件 |
w 文件名 |
另存为指定文件名的文件 |
q |
退出vi编辑器(若未修改文件) |
q! |
强制退出vi编辑器(不保存修改) |
wq |
保存文件并退出编辑器 |
wq! |
强制保存文件并退出(适用于只读文件) |
set number |
显示行号 |
set nonumber |
隐藏行号 |
s/旧字符串/新字符串 |
替换当前行中首次出现的旧字符串 |
s/旧字符串/新字符串/g |
替换当前行中所有旧字符串 |
%s/旧字符串/新字符串/g |
替换文件中所有旧字符串 |
n1,n2s/旧字符串/新字符串/g |
替换第n1行到第n2行中所有旧字符串 |
/字符串 |
从光标位置向下搜索字符串 |
?字符串 |
从光标位置向上搜索字符串 |
n |
定位到下一个搜索结果 |
N |
定位到上一个搜索结果 |
vi的高级技巧
- 多窗口编辑:通过
split命令可分割窗口,实现多个文件同时编辑。split file1.txt将当前窗口分为上下两部分,下方打开file1.txt,使用Ctrl + w切换窗口,q关闭当前窗口。 - 可视化模式:在命令模式下按
v进入字符可视化模式,按V(大写)进入行可视化模式,按Ctrl + v进入块可视化模式,可通过移动光标选择文本,然后进行删除、复制等操作。 - 自动缩进:通过
set autoindent启用自动缩进,在插入模式下换行时会自动缩进,保持代码结构清晰。 - 语法高亮:通过
syntax on启用语法高亮,支持多种编程语言的语法标识,便于代码阅读。
使用注意事项
- 区分大小写:vi的命令区分大小写,例如
dd删除行,而DD无意义;/string区分大小写,若需不区分大小写搜索,可使用set ic命令。 - 避免误操作:在命令模式下误触按键可能导致意外修改,建议养成频繁按
Esc键返回命令模式的习惯。 - 备份文件:编辑重要文件前,建议先备份原文件,避免操作失误导致数据丢失。
相关问答FAQs
问题1:vi编辑器中如何快速跳转到指定行?
解答:在末行模式下输入行号后按回车即可跳转到指定行,输入25并按回车,光标将跳转到文件的第25行,在命令模式下输入nG(n为行号)也可实现跳转,例如50G跳转到第50行。
问题2:vi编辑器中如何删除包含特定字符串的所有行?
解答:可通过结合搜索和删除命令实现,首先在末行模式下使用/字符串/定位到包含目标字符串的行,然后在命令模式下输入d删除该行,若需删除所有匹配行,可使用g/字符串/d命令,其中g表示全局匹配,d表示删除。g/error/d将删除文件中所有包含“error”的行。

