在Linux终端的世界里,vi(或其增强版vim)无疑是最具代表性的文本编辑器之一,自1976年诞生以来,它凭借简洁的界面、高效的命令操作和强大的可定制性,成为系统管理员、开发者以及Linux爱好者的必备工具,尽管图形化编辑器日益普及,但vi在终端环境中的不可替代性依然显著——无论是快速修改配置文件、编写脚本,还是在无图形界面的服务器上工作,vi都能以轻量级、高效率的方式完成任务,本文将详细介绍vi的核心功能、操作模式及实用技巧,帮助读者从入门到熟练掌握这一经典工具。

vi的启动与退出
要使用vi编辑文件,首先需在终端中输入vi [文件名]命令,若文件不存在,vi会自动创建新文件;若文件已存在,则打开该文件进行编辑,编辑名为test.txt的文件,可输入:
vi test.txt
进入vi界面后,默认处于命令模式(也称普通模式),此时无法直接输入文本,需通过特定命令切换模式,退出vi的方式有多种:
- 保存并退出:在末行模式下输入
wq(write and quit)或x。 - 不保存退出:输入
q!(quit without saving),强制放弃修改并退出。 - 仅保存不退出:输入
w(write),适用于修改后需继续编辑的情况。
vi的三种核心模式
vi的核心设计围绕三种模式展开,理解并熟练切换模式是掌握vi的关键:
命令模式(Normal Mode)
启动vi后默认进入此模式,主要用于光标移动、文本删除、复制粘贴等操作。
- 光标移动:
h(左)、j(下)、k(上)、l(右);gg(跳至首行)、G(跳至末行)、w(跳至下一单词首)、b(跳至上一单词首)。 - 文本编辑:
x(删除当前字符)、dd(删除当前行)、yy(复制当前行)、p(粘贴到光标后)、P(粘贴到光标前)。 - 撤销与重做:
u(撤销上一步操作)、Ctrl+r(重做被撤销的操作)。
插入模式(Insert Mode)
用于输入或修改文本,需从命令模式进入,常用进入命令:
i(insert):在光标前插入文本。a(append):在光标后追加文本。o(open line):在当前行下方新建一行并插入文本。O:在当前行上方新建一行并插入文本。
进入插入模式后,终端左下角会显示-- INSERT --提示,按Esc键可返回命令模式。
末行模式(Ex Mode)
用于执行保存、退出、搜索、替换等高级命令,需从命令模式输入进入。

- 保存文件:
w(当前文件)、w newfile.txt(另存为新文件)。 - 搜索文本:(向下搜索)、(向上搜索),按
n跳至下一个匹配项,N跳至上一个。 - 替换文本:
%s/旧文本/新文本/g(全局替换)、s/旧文本/新文本/g(替换当前行)。
命令模式下的高效操作
命令模式是vi的核心,掌握其快捷键能极大提升编辑效率,以下为常用操作分类:
光标移动与定位
- 按字符移动:
h(左)、j(下)、k(上)、l(右)。 - 按单词移动:
w(下一单词首)、e(当前单词尾)、b(上一单词首)。 - 按行移动:
0(行首)、(行尾)、gg(首行)、G(末行)、nG(跳至第n行,如5G跳至第5行)。 - 按屏幕移动:
H(屏幕首行)、M(屏幕中间行)、L(屏幕末行)。
文本编辑与修改
- 删除:
x(删除当前字符)、nx(删除后n个字符,如3x删除3个字符)、dd(删除当前行)、ndd(删除n行,如2dd删除2行)。 - 复制与粘贴:
yy(复制当前行)、nyy(复制n行)、p(粘贴到光标后)、P(粘贴到光标前)。 - 剪切与移动:
dd(删除后可粘贴,相当于剪切)、x(删除字符后可粘贴)。 - 替换:
r(替换当前字符,如rA将当前字符替换为A)、R(进入替换模式,连续替换多个字符,按Esc退出)。
撤销与重做
u:撤销最近一次操作(可连续按多次撤销多步)。Ctrl+r:重做被撤销的操作。
插入模式与末行模式功能详解
插入模式的灵活应用
插入模式不仅支持基本的文本输入,还可结合命令模式实现高效编辑:
- 从命令模式进入插入模式后,可通过
Ctrl+w删除前一个单词、Ctrl+u删除当前行内容,快速修正输入错误。 - 在
o或O命令下,新行会自动缩进(若.vimrc中设置了autoindent),保持代码格式整洁。
末行模式的高级命令
末行模式是vi的“控制中心”,支持批量操作和文件管理:
- 文件操作:
e filename(打开新文件)、r filename(将文件内容读入当前文件光标后)、w! filename(强制保存为新文件,覆盖已存在文件时需用)。 - 搜索与替换:
/pattern:向下搜索pattern,支持正则表达式,如/\d{3}搜索连续3位数字。s/pattern/replacement/g:替换当前行中所有匹配项;%s/pattern/replacement/gc:全局替换并提示每个匹配项是否替换(c为确认)。
- 代码与缩进:
set tabstop=4(设置制表符宽度为4空格)、set autoindent(自动缩进)、syntax on(开启语法高亮)。
进阶功能:提升效率的利器
熟练掌握基础操作后,vi的进阶功能能进一步释放其潜力:
多窗口操作
vi支持分屏编辑,方便同时查看多个文件或同一文件的不同部分:
- 水平分屏:
split filename(在上方打开新文件)、new(在下方打开新缓冲区)。 - 垂直分屏:
vsplit filename(在左侧打开新文件)。 - 窗口切换:
Ctrl+w后按h/j/k/l切换到对应方向的窗口,Ctrl+w+c关闭当前窗口。
宏录制与自动化
通过宏录制可重复执行复杂操作:

- 录制宏:在命令模式下按
qa(a为寄存器名),执行一系列操作(如dd、p、j),按q停止录制。 - 执行宏:
@a(执行寄存器a中的宏),(重复执行上一次宏)。
与系统命令交互
vi可直接调用系统命令,无需退出编辑器:
!command:执行系统命令并显示结果,如!ls查看当前目录文件,按Enter返回vi。r !command:将命令输出读入文件,如r !date将当前时间插入光标后。
实用技巧与最佳实践
配置文件定制
通过修改.vimrc(位于用户家目录)可自定义vi的行为,
" 设置行号显示 set number " 设置语法高亮 syntax on " 设置自动缩进 set autoindent " 设置制表符为4空格 set tabstop=4 shiftwidth=4 expandtab " 设置文件编码为UTF-8 set encoding=utf-8
保存后,vi会自动加载这些配置,提升编辑体验。
插件管理
vi的强大之处在于其可扩展性,通过插件可实现代码补全、文件树、Git集成等功能,推荐使用vim-plug插件管理器:
- 安装
vim-plug:curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
- 在
.vimrc中添加插件配置(如NERDTree文件树、YouCompleteMe代码补全):call plug#begin('~/.vim/plugged') Plug 'preservim/nerdtree' Plug 'ycm-core/YouCompleteMe' call plug#end() - 在vi中运行
PlugInstall安装插件。
常见问题解决
- 乱码问题:若文件显示乱码,可在末行模式下输入
set encoding=utf-8或set fileencoding=utf-8。 - 权限问题:编辑系统文件时可能遇到权限不足,可通过
w !sudo tee %强制保存(需当前用户有sudo权限)。
vi作为Linux终端下的经典文本编辑器,其高效的操作模式和强大的定制能力使其经久不衰,尽管初学者可能需要时间适应其命令驱动的操作方式,但一旦掌握,便能实现远超图形化编辑器的编辑效率,从基础的文件编辑到复杂的多窗口操作、自动化脚本编写,vi都能胜任,对于Linux用户而言,学习vi不仅是掌握一项工具,更是提升终端操作能力的重要一步,建议读者从基础模式切换和命令操作开始,逐步探索其高级功能,在实践中体会vi的独特魅力。


















