ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Linux vi编辑器完整实战指南:从入门到高效使用

2026/9/30 6:19:43 拓冰建站 浏览量
Linux vi编辑器完整实战指南:从入门到高效使用 很多人第一次真正使用Linux不是在图形界面里点点鼠标而是通过SSH登录一台远在机房的服务器眼前只有一个黑乎乎的终端。这时候要改一个配置文件没有鼠标、没有图形编辑器你手头最可靠的工具就是vi。我第一次用vi的时候心里全是问号怎么输入字母不显示字、按退格键反而冒出奇怪字符、想退出还退不出去网上搜了一圈都说按Esc然后输入:wq但我怎么操作都不对最后只好直接把终端关掉重连。后来被工作环境逼着连续用了几周才慢慢摸到它的脾气。这篇就把vi编辑器的完整使用经验梳理一遍覆盖三种模式、常用快捷键、查找替换、配置文件定制和实战中容易踩的坑适合完全没接触过vi的初学者也适合已经会基本操作但想系统查缺补漏的人。文章尽量把每个命令的为什么也讲清楚而不是单纯丢一张快捷键表。毕竟vi的命令太多了只有理解了它的设计逻辑才能真正记住而不是背两天就忘。1. 为什么到了现在还要学vi三个绕不开的现实场景1.1 场景一没有图形界面的服务器环境很多人是在自己的电脑上装了一个带桌面的Linux发行版比如Ubuntu桌面版、Deepin或者Kali的默认桌面平时用鼠标点编辑器改文件完全没觉得vi有什么必要。但真实的服务器环境尤其是云服务器、虚拟机里的最小化安装系统基本都不装图形界面。你通过SSH登录过去整个屏幕就一个终端这时候想改Nginx配置、调一下crontab、写一个启动脚本能用的程序名字就那么几个vi是其中最通用的一个。换个角度说哪怕你只是临时登上一台陌生的机器不确认它装没装nano、gedit、VSCode但只要它是Linux输入vi基本都能打开。这种保底可用的属性让vi成了系统管理员工具箱里最不起眼但最离不开的东西。1.2 场景二所有发行版默认都带不需要额外安装在联网环境下安装vim其实很快一条命令就行# Debian / Ubuntu sudo apt install vim -y # CentOS / RHEL / Rocky sudo yum install vim-enhanced -y但问题在于很多内网服务器、生产环境根本没有外网权限装一个软件要审批、要拷包、要解决依赖非常麻烦。而vi几乎是100%预装的打开就能干活。我遇到过一次客户的内网机器连wget都没有更别说包管理器配置了最后就是靠vi改了将近十个配置文件一个字符一个字符敲出来的。所以vi不是要不要学的问题而是你在Linux环境里混迟早要面对它的问题。1.3 vi和vim的关系先搞清楚再学不迷糊严格来说vi是最早的经典编辑器vimVi IMproved是vi的增强版增加了语法高亮、多级撤销、可视模式、插件支持等能力。现在大多数发行版里vi命令其实是vim的软链接或别名你执行vi打开的就是vim。这没什么不好因为vim完全兼容vi的基本操作学vi的快捷键体系到vim里一样能用。但你在网上查资料时会看到很多教程讲vimrc而不是vircc原因就在这里。下一章要讲的配置部分也是改~/.vimrc而不是某个叫~/.virc的文件。记住这个关系后面找资料就不会被绕晕。2. 三种模式是怎么回事vi的整个使用逻辑都建立在这个基础上2.1 命令模式、插入模式、末行模式分别干什么vi和Windows上的记事本最大的区别就是它不是一个打开就能打字的编辑器而是分模式的。理解不了模式就理解不了vi的一切行为。三种模式分别是命令模式Normal mode打开vi后默认进入的模式。这个模式下你敲下的每个字母都被当作命令解释而不是往文件里输入字符。比如按dd删除当前行按yy复制当前行。插入模式Insert mode真正往文件里输入文字的模式。和记事本的感觉一样但你需要先按某个键从命令模式切进来。末行模式Last line mode / 命令行模式在命令模式基础上按一下冒号:进入vi底部会出现一个输入行用来执行保存、退出、查找替换等命令比如:wq保存退出、%s/old/new/g做全局替换。三种模式的切换关系可以简单看成命令模式 --(按 i / a / o 等)-- 插入模式 命令模式 --(按 : )-- 末行模式 插入模式 / 末行模式 --(按 Esc)-- 命令模式新手最容易犯的错就是打开vi后直接敲键盘输入文字结果屏幕上什么反应都没有或者出现一堆莫名其妙的命令效果比如按了d以后光标的字符没了。这不是vi坏了而是你根本不在插入模式里。2.2 模式切换口诀和实操演示切换模式有个简单的记忆口诀按Esc回人间按i进输入。实际操作一下。假设你执行vi test.txt打开了一个空文件这时候vi处于命令模式屏幕左下角没有-- INSERT --字样。你想输入hello必须先按小写字母i屏幕左下角出现-- INSERT --此时键盘才解锁可以正常打字。输入完成后按Esc退出插入模式左下角的-- INSERT --消失vi回到命令模式此时你输入的字符保留在文件里但任何按键都不会继续添加文字了。2.3 为什么按键盘没反应或乱输字符模式没搞清的表现我见过很多新手在命令模式下狂按键盘屏幕上的代码突然少了一行又一行就是因为按到的dd、x这些键触发了删除命令。反过来有些人想退出vi按了一堆q、w结果屏幕毫无反应因为命令模式下单个字母q并不是退出命令q被解释成了宏录制的开始直到下一次再按q才结束。真正退出需要按:q也就是先按冒号进入末行模式再按q。还有更经典的场景已经处于插入模式却不确定自己到底在哪个模式于是又按了一遍i。结果屏幕上莫名其妙多了一个字母i。因为插入模式下所有键盘输入都原样写进文件了。这时候不要慌按Esc回到命令模式再按dd把多余的那行删掉就行。2.4 新手最容易犯的五个操作错误结合我带过的经验这里集中列出几个高频翻车点打开vi就打字结果命令模式触发各种快捷键文件被改得乱七八糟。按了i进入插入模式但输入法是中文敲的标点符号全变成中文全角写配置文件时把冒号写成了中文冒号程序直接报错。想退出时直接按q没加冒号vi毫无反应。按Esc后立刻输入:wq但冒号是按了Shift中文冒号键然后切回英文模式输入的导致输入的内容是中文冒号vi不认。在插入模式下按方向键光标没移动反而输入了ABCD。这个问题放到最后的排查部分细讲。其实这几个错误都可以靠一件事解决时刻关注vi屏幕左下角有没有-- INSERT --提示。有就说明你是输入状态没有说明你处于命令状态键盘上所有键都是控制键。3. 快捷键体系从光标移动到批量操作一次讲透3.1 光标移动hjkl之外还有很多高效玩法vi最反直觉的一点是它用h j k l四个键代替方向键分别是左、下、上、右。这个设计是为了让手指不用离开键盘中央区域提高输入效率。虽然初学时很别扭但养成习惯之后你会发现比伸手去够方向键快得多。更常用的移动命令是下面这些组合快捷键功能说明典型使用场景h/j/k/l光标左/下/上/右移动一个字符精确定位到某个字符w跳到下一个单词的开头快速跳过一段英文配置内容b回到上一个单词的开头回看刚才读过的内容e跳到当前单词的结尾修改一个单词时快速到词尾0跳到当前行的行首第0列回到行首检查缩进^跳到当前行第一个非空字符跳到行首但有缩进时更常用$跳到当前行的行尾快速到行尾追加内容gg跳到文件第一行查看文件开头G跳到文件最后一行查看文件末尾NG跳到第N行如50G跳到第50行按行号定位到报错行Ctrld向下翻半屏阅读日志文件Ctrlu向上翻半屏回到上一屏内容Ctrlf向下翻一整屏快速浏览大文件Ctrlb向上翻一整屏往回翻页这里说一个我自己的使用习惯读代码的时候w和b用的频率远高于h和l。因为代码里缩进很多按h一格一格挪太慢按w按单词跳效率高得多。移动的目的是让光标到达你想编辑的位置而不是为了按而按。3.2 插入、删除、复制、粘贴的快捷组合编辑命令是vi快捷键里最核心的部分。先按住Esc回到命令模式再用下面的组合快捷键功能说明使用场景i在光标前插入最常用的插入方式I在当前行行首插入快速到行首添加内容a在光标后插入想在某个字符后面追加时A在当前行行尾插入不用先按$再按io在下一行插入新行往下添加配置项时最快O在上一行插入新行往上方加内容时最快x删除光标下的字符单字符删除X删除光标前的字符类似退格键dd删除当前整行删掉一行配置dw删除从光标到单词结尾删除一个单词的一部分d$删除从光标到行尾清空当前行的后半部分d0删除从行首到光标位置清空当前行的前半部分yy复制当前整行复制配置行yw复制光标所在单词复制一个单词p粘贴到光标之后粘贴已复制或删除的内容P粘贴到光标之前在当前位置前粘贴D相当于d$删除到行尾删除和复制在vi里是联动的dd删除的内容会保存在寄存器里相当于剪切用p就可以粘贴到别处。所以很多人习惯用dd加p实现把这一行移下去的效果先dd删掉再移动到目标位置按p。3.3 撤销、重做与重复命令vi里撤销操作的默认快捷键是u在命令模式下按u撤销上一步。这个上一步的定义比记事本更细比如你连续输入了二十个字符在记文本里算一步在vi里可能算很多步因为每一个插入动作的撤销粒度可以拆得很细。经验是突然改错了一段多按几次u一般能回到你想要的状态。撤销之后想反悔也就是重做快捷键是Ctrlr。举例你按u撤销了某次删除接着又按了一次u想取消撤销就可以按Ctrlr恢复。这两个键配合起来基本能覆盖误操作的回退需求。还有一个很实用的命令是.也就是英文句号。它会重复上一次的编辑操作。比如你刚做了一次删除当前行的操作那么每按一次.就删除下一行很适合批量处理格式统一的内容。又比如你刚粘贴了一次配置移动光标到另一处再按.等于又粘贴一次省去反复p的麻烦。3.4 数字前缀让快捷键按倍数生效vi里绝大多数命令都可以在前面加数字表示执行次数。这个设计看着简单实际用起来效率提升非常明显5dd删除从当前行开始的5行。3yy复制当前行及下面两行共3行。2w往后跳两个单词。10x删除从光标位置开始的10个字符。3p粘贴3次。我第一次用5dd删日志文件里的连续错误行时明显感觉比一行一行删快太多了。后来养成了习惯凡是涉及连续、重复的操作都会先想想能不能加个数字前缀。还有一个小技巧当你不确定当前文件有多少行时先输入一个很大的数字比如99999Gvi会自动跳到文件最后一行效果和G一样。反过来可以用:set nu显示行号再用:N精确跳转这两种方式在查报错时很常用。4. 查找与替换处理配置文件内容的高频操作4.1 在vi里搜索关键字在vi里搜索单词不是用Ctrlf而是在命令模式下按斜杠/然后输入要搜的内容回车。vi会从光标当前位置向后查找。比如/nginx回车后文件中第一个出现nginx的位置会被高亮。如果这不是你要找的那一个按n继续向后查找下一个按N向前查找上一个。查找时注意区分大小写默认是区分大小写的。想忽略大小写可以执行:set ignorecase关闭这个行为用:set noignorecase。我以前排查Nginx配置时经常在几百行的配置文件里找某个server_name出现的位置用/server_name加上连续按n几秒钟就能遍历所有出现点比肉眼逐行扫快非常多。同样按问号?可以从当前位置向前也就是往上查找?error这里的向上、向下是以文本流方向说的具体用哪个取决于你当前光标位置和目标的相对方位。4.2 全局替换和局部替换的写法替换功能是vi里最强大的功能之一但语法需要稍微记一下。基本格式是:s/旧内容/新内容/举个例子把当前行的第一个apple换成orange:s/apple/orange/如果想把当前行所有的apple都换成orange在后面加一个g:s/apple/orange/g如果想针对整个文件替换前面要加一个%:%s/apple/orange/g这个命令的意思是百分号代表全文范围s是替换substituteg是global全局替换。如果你看网上别人写的:%s/old/new/gc最后的c是每次替换前询问确认适合做高风险替换防止把不想替换的地方也替换掉。范围替换也完全可控。比如只想替换第5行到第15行之间的内容:5,15s/apple/orange/g查配置文件时我常用的是先:set nu显示行号看到某一段的范围之后再用:5,15s/xxx/yyy/g只处理那一段避免误伤文件其他位置。4.3 查找到内容后如何快速跳转使用/搜索后vi会自动高亮所有匹配的结果。想取消高亮可以执行:nohlsearch这个命令很常用因为高亮有时候会干扰阅读。也可以直接在执行搜索后按Esc再输入:nohl效果一样。跳转方面n和N已经能实现前后跳转。如果要跳到文件的某个具体行号使用:50回车后光标会跳到第50行。我经常配合报错信息用比如日志里说config.php line 32我直接输入:32就过去了。4.4 多文件编辑和分屏操作实际工作中经常需要对照两个文件做修改。vi支持不退出程序直接打开另一个文件:e /etc/nginx/nginx.conf这个命令会关闭当前文件并打开新的文件。如果想同时看两个文件可以分屏:sp /etc/nginx/conf.d/default.conf:sp是上下分屏:vsp是左右分屏。分屏后在两个窗口之间切换用Ctrlw加w。比如先按Ctrlw再按w光标就在两个窗口之间来回切换。这是我在实际服务器上改配置时最常用的方式左边的窗口开着原始默认配置作参照右边的窗口写自己的配置来回切换对照效率比单独开两个SSH会话高多了。多文件相关命令作为补充命令说明:e 文件名打开指定文件:n切换到下一个文件打开多个文件时:N切换到上一个文件:sp 文件名上下分屏打开文件:vsp 文件名左右分屏打开文件Ctrlw w在分屏窗口间切换Ctrlw q关闭当前分屏窗口多文件配合分屏是vi真正发挥生产力优势的地方。建议在练习阶段就多用不要一直停留在只编辑单个小文件。5. 让vi更好用.vimrc配置与中文乱码解决5.1 第一次打开vi时最想改掉的默认行为vi默认启动后是不显示行号的编辑配置文件时特别不方便。另外tab键默认显示为8个空格宽度会打乱代码对齐尤其编辑Python或Shell脚本时非常难受。还有搜索后关键词高亮不取消一直亮着干扰视线。这三个痛点都可以通过配置文件解决。vi的用户级配置文件是~/.vimrc。如果这个文件不存在就自己创建一个。创建后重启vi配置就会生效。vim ~/.vimrc5.2 常用.vimrc配置项说明下面这份配置我用了很长时间每一项都有对应的需求不盲目堆配置set number 显示行号 syntax on 开启语法高亮 set autoindent 自动缩进 set ts4 tab宽度为4个空格 set expandtab 把tab键展开为空格 set shiftwidth4 自动缩进时使用4个空格 set hlsearch 搜索时高亮 set incsearch 输入搜索关键词时实时预览 set ignorecase 搜索忽略大小写 set smartcase 如果搜索词含大写字母则区分大小写 set encodingutf-8 内部编码使用utf-8 set fileencodingsutf-8,gbk,gb2312 打开文件时尝试的编码顺序 set cursorline 当前行高亮 set showcmd 在底部显示正在输入的命令set expandtab这条要注意如果你编辑的是Makefile这类严格要求tab键的文件展开为空格会出问题。那时候可以把配置改成set noexpandtab或者保持默认按实际场景来。我一般先默认展开为空格遇到Makefile再单独处理。5.3 中文乱码的根因和修法在服务器上用vi打开一个从Windows上传过来的文件中文经常显示成乱码。这个问题的根源在于编码不一致Windows上很多文件默认是GBK或GB2312编码而Linux终端和vi默认按UTF-8解码两边对不上自然就乱码了。解决办法是告诉vi按什么顺序尝试解码文件。上面配置里的set fileencodingsutf-8,gbk,gb2312就是干这个的。vi打开文件时会依次尝试utf-8、gbk、gb2312三种编码找到能正确解码的就用它来显示。配置生效后再打开常见中文文件基本就不会乱码了。如果你的终端本身编码没问题但vi里还是乱码还有一种情况是文件本身是GBKvi尝试的顺序里没有GBK于是按UTF-8强行解码导致乱码。这时可以临时执行:e encgbk这个命令是让vi用GBK编码重新加载当前文件。如果文件名后缀是.txtWindows下复制过来的我经常直接用这个命令救急。5.4 配置立即生效的方法改了~/.vimrc之后不一定非要退出重开vi。在vi里执行:source ~/.vimrc就能立刻加载最新配置不用中断当前编辑状态。这个命令在调试配置项的时候特别好用改一行执行一次source马上看效果不满意再改。如果你手动改完配置但忘了source很多配置要重启vi才生效容易产生我刚才是不是改错了的错觉。所以我的习惯是每改完一个配置项就立即source一次并实际操作验证效果。调配置本来就是个试错过程越早发现问题越好解决。6. 实操中的常见问题排查与经验心得6.1 方向键变成A B C D怎么处理这个问题几乎每个vi新手都遇到过。在命令模式或插入模式按方向键屏幕上却没有移动光标而是出现A、B、C、D这样的字符看起来像是键盘坏了。实际上是因为终端没能正确识别方向键的转义序列vi把它们当成了普通字符。最简单的解决办法是编辑时不要用方向键改用h j k l四个键移动光标。这也是vi的原始设计本意。如果你实在方向键用习惯了可以检查一下是不是处于vi compatible模式执行:set nocompatible这个命令关闭vi的兼容模式让vim使用自己增强的行为很多时候方向键问题就解决了。不过更根本的方案还是适应hjkl毕竟到了没有方向键的终端或者某些特殊环境你唯一的移动方式就是这四个字母。6.2 异常退出后的swap文件问题vi在编辑文件时会生成一个以.swp结尾的交换文件用于保存编辑会话的临时数据。如果你在编辑过程中终端突然断线、SSH连接断开或者忘记保存直接杀掉了vi进程交换文件不会被自动删除。下次再打开同一个文件时vi会提示类似这样的信息Swap file .nginx.conf.swp already exists!并询问你是只读打开、删除交换文件还是恢复编辑等。如果确定上次编辑的内容不想要了选删除交换文件的选项通常是按d就可以正常打开文件。但如果上次编辑过程中有重要修改没保存应该选择恢复选项用vi -r或者按提示执行恢复把数据捞回来。一个更稳妥的排查流程是先打开文件看看当前内容是不是你想要的再决定是否删除.swp文件。手动删除的命令是rm .nginx.conf.swp注意这个文件通常是隐藏的文件名前面带点。删错位置文件备份的数据会导致无法恢复所以一定先确认。6.3 编辑了一半想放弃不保存退出的正确命令如果改错了不想保存很多人着急就按CtrlC发现vi没反应又开始乱按最后文件被保存成一个半成品。正确的不保存退出命令是:q!先按冒号进入末行模式再按q表示退出感叹号表示强制、不保存修改。这样退出后文件保持上次保存的状态你的修改全部丢弃。如果你做了修改但想正常保存退出命令是:wq保存并退出和:x效果相同。还有一点要区分ZZ两个大写字母Z在命令模式下也相当于保存退出缺点是不好记所以多数人用:wq。6.4 给新手的vi学习顺序建议最后聊一点个人经验。我不建议一上来就背快捷键大全那样三天就忘光了。比较高效的学习路径是第一周只记六个操作i进入插入、Esc回命令模式、hjkl移动、:wq保存退出、dd删除行、u撤销。这六招能保证你完成绝大多数基础编辑。第二三周补充常用操作yy复制、p粘贴、/搜索、gg到文件首、G到文件尾、o新建行、数字G跳转到指定行。这些足够应付日常配置文件修改。一个月后再进阶学:%s/old/new/g全局替换、多文件分屏、数字前缀、配置.vimrc。这些属于效率工具基础不牢时学容易混乱。等你用了几个月vi会发现它最迷人的地方不是单个命令而是命令之间的组合逻辑。数字前缀、.重复、寄存器这些机制像积木一样拼在一起能组合出无数种高效操作。这时候你已经不需要背快捷键表了看到操作需求手指自己就知道按什么。我自己就是从觉得vi反人类走到默认编辑器就是vi的。现在哪怕在图形界面里我也习惯打开终端用vi改文件不是怀旧是真的顺手。这篇内容基本覆盖了我在真实环境中用到的大多数功能但vi还有可视模式、宏录制、多窗口等更深入的内容没展开等你把这里面的基础打牢了再去摸索那些也不迟。