新闻详情

新闻详情

首页 / 资讯中心 / 详情

Linux vi编辑器完全指南:模式、高频命令与避坑实战

发布时间:2026/9/29 12:53:05来源:尧图网络
Linux vi编辑器完全指南:模式、高频命令与避坑实战
我还记得第一次在服务器上敲下vi命令时的窘境屏幕切换成一片陌生的黑色界面光标变成一个闪烁的方块。我想输入点什么确实能打出字想退出却怎么也退不出去。实在没办法只好直接关掉终端窗口。后来才知道几乎每个 Linux 新手都经历过这个vi 退出难题。vi 作为 Linux 系统内置的编辑器几十年如一日地存在于每一台 Unix/Linux 机器上不管你从事运维、开发还是测试只要跟服务器打交道就绕不开它。这篇教程我尽量一次讲透vi 的三种模式、高频命令、搜索替换、多文件操作再到配置 vimrc 和避坑经验让新手能快速上手老手也能查漏补缺。1. 为什么2025年了还在用vi编辑器1.1 vi和vim到底该叫哪个vi 是 Bill Joy 在 1976 年写出来的比很多读者的父母年龄都大。它最初是 BSD Unix 的一部分后来被纳入 POSIX 标准。这意味着什么意味着任何声称兼容 POSIX 的系统都必须自带 viLinux 当然也不例外。这就是为什么你在一个全新安装的服务器上什么都不装就有 vi 可用。vim 是 Vi IMproved 的缩写由 Bram Moolenaar 在 1991 年发布。它在兼容 vi 全部命令的基础上增加了语法高亮、多级撤销、可视模式等一大堆现代化功能。在很多现代 Linux 发行版里你在终端敲vi实际运行的是 vim——系统安装时已经把 vi 做成了指向 vim 的符号链接这是社区有意为之。但在某些极简容器镜像、旧版 Solaris 或 BSD 上vi 还是当年那个 vi功能极其朴素连方向键都不一定好用。所以在日常交流里vi 和 vim 经常混着说。你只要记住一点vi 是一套标准vim 是它最流行的实现。这篇教程讲的所有命令在两者的基础部分完全通用。1.2 学vi的三大现实理由第一个理由是服务器环境没得选。你在一台刚接手的服务器上排查问题可能连 vim 都没有但 vi 一定在。学会 vi意味着你在任何 Linux 环境里都有退路不会因为没有图形界面没法改文件这种滑稽理由卡住。第二个理由是快。一旦脱离鼠标、脱离方向键你的双手不用离开字母区编辑效率会有肉眼可见的提升。熟练 vi 的人删除三行按下3dd几百行的文件用/关键词跳转那种流畅感是鼠标操作体验不到的。尤其是改配置、查日志这类高频操作vi 的定位效率几乎是碾压级的。第三个理由是生态惯性。十几年的 Linux 管理员、开发者他们的肌肉记忆里全是 vi 命令。你接手一套系统几乎所有现存的脚本和配置都是前辈用 vi 改出来的。看懂 vi 操作就是读懂这个生态的一部分。提示如果你已经熟悉 vim在真正的纯 vi 里可能会感到寸步难行。后面避坑部分我会专门说这个问题。2. vi的三种模式理解这个就入门了一半2.1 三种模式的本质vi 区别于 Windows 记事本最大的地方就是它不是一个随时输入的文字框而是一个有状态的编辑器。vi 的正常状态是命令模式在这个模式下你敲下的每个键都被解读为命令而不是往文件里塞字符。这个设计很反直觉但恰恰是它高效的原因——所有编辑动作都可以用单个字母完成你不需要去菜单里翻找。具体来说vi 有三种模式命令模式Normal Mode进入 vi 的默认状态。所有按键都被当命令处理比如h/j/k/l移动光标、dd删除一行、yy复制一行。插入模式Insert Mode真正输入文本的状态。在这个模式下你敲的每个字符都会进入文件。末行模式Last Line Mode也叫命令行模式在命令模式下按冒号进入用于执行保存、退出、搜索、替换等全局操作。命令会显示在屏幕底部输完按回车执行。对新手来说最痛苦的就是在这三种模式之间频繁切换。其实模式切换的指令很少记住下面这张表就够了。目标模式操作说明命令模式按 Esc无论你在哪个模式按 Esc 都回命令模式插入模式按 i / a / o 等i 在光标前插入a 在光标后插入o 在下方新建一行末行模式按 :冒号在命令模式下输入冒号即进入末行模式这个模式设计的核心优势是光标移动、删除、复制、替换都不需要碰 Ctrl、Alt 这些组合键全部单键完成。缺点就是学习成本——你得先忘掉编辑器就是输入框这个固有直觉。而一旦适应你就会发现单键命令带来的连贯操作体验是任何图形编辑器都给不了的。2.2 进入插入模式i、a、o、A、O 怎么选插入模式有多个入口区别在于光标插入的位置i光标左侧插入a光标右侧插入A行尾插入相当于先跳到行尾再 ao在光标所在行下方新建一行并进入插入O在光标所在行上方新建一行并进入插入I行首插入跳到第一个非空白字符处很多新手从头到尾只用一个i这没错但效率会打折扣。你想在行尾追加内容时A一步到位省掉先按 End 键再按 i 的功夫。想在两行代码之间补一行o直接解决。这些入口不是功能重复而是为了让你少动一次光标、少按一次键。3. 第一次实操用vi新建并编辑一个文件3.1 启动vi的三种命令行参数启动 vi 时除了最简单的vi 文件名还有几个常用参数值得记住。# 打开文件若文件不存在则新建保存时创建 vi /etc/nginx/nginx.conf # 打开文件并把光标定位到第10行 vi 10 nginx.conf # 打开文件并定位到第一个匹配 error 的位置 vi /error nginx.conf第三个参数在处理几百行日志时特别有用——你大概记得报错信息长什么样直接让 vi 帮你跳过去省去手动翻找。3.2 完整走一遍写配置、存盘、退出假设我要在一台服务器上往/etc/profile末尾追加一行注释完整的操作流程是这样的执行sudo vi /etc/profile打开文件。按G跳到文件最后一行。按A进入行尾插入模式。输入要追加的内容。按Esc回到命令模式。输入:wq保存并退出。验证运行tail -n 3 /etc/profile查看文件末尾内容。这里解释几个容易被忽略的细节。为什么用 sudo因为/etc下的文件属于 root普通用户只有只读权限直接vi /etc/profile打开后修改保存时会报错。另一个常见情况是你忘了加 sudo打开改完后才发现无法保存。这时可以先:q!放弃修改再重新用 sudo 打开。当然也有一个老鸟技巧叫存盘时提权:w !sudo tee %这个命令的作用是把当前缓冲区内容作为标准输入传给sudo tee%会展开为当前文件名。说白了就是借 root 权限强制写入。只建议应急用别养成习惯——正常编辑系统文件前就sudo vi才是正解。3.3 验证文件修改结果的技巧保存退出不是终点我习惯每次都验证一下修改结果。最简单的验证工具就是tail、head、grep这组命令比如用grep -n 关键字 文件确认修改内容出现在预期的行号上。这个习惯能避免以为自己改成功了结果语法错误一堆的尴尬。特别是修改配置类文件后建议再用nginx -t、sshd -t这类语法检查命令做二次确认。4. 高频命令清单移动、删除、复制、撤销一次讲完4.1 光标移动从字符级到文件级光标移动是 vi 使用的基石我把它分成五个层次来记。字符级h左移、j下移、k上移、l右移。为什么不直接用方向键因为 vi 诞生于方向键还没普及的终端时代而且 hjkl 在盲打时手指不用离开主键盘区效率更高。单词级w跳到下一个单词开头b跳到上一个单词开头。这里要注意 vi 对单词的定义是字母数字下划线组成的连续串标点符号会单独算一个单词。W和B则是以空白作为分隔处理代码时更常用。行级和屏幕级0跳到行首第一个字符^跳到行首第一个非空白字符$跳到行尾。屏幕级有H屏幕顶部、M屏幕中部、L屏幕底部Ctrlf向下翻一屏Ctrlb向上翻一屏Ctrld向下翻半屏Ctrlu向上翻半屏。文件级gg跳到第一行G跳到最后一行nG跳到第 n 行。比如100G直接到第 100 行。记这些命令有个小口诀gg就是 go to topG就是 go to bottomj像一个往下伸的钩子k像一个往上指的箭头。口诀不一定科学但能帮你建立最初的记忆锚点。4.2 删除、复制、粘贴先理解动词范围语法vi 的命令有一个非常优雅的组合逻辑操作动词 移动范围。删除是d复制是yyank它们都能跟移动命令组合。dd删除光标所在行d$从光标删到行尾d0从光标删到行首dw删除一个单词3dd从当前行开始删除 3 行yy复制当前行3yy复制 3 行y$从光标复制到行尾p在光标后粘贴或下一行P在光标前粘贴或上一行这个动词范围的规则非常重要。理解了语法而不是死记命令你可以自己组合出很多命令。比如从光标删到文件末尾就是dG从光标删到文件开头就是dgg。不需要专门的命令只需要理解 vi 把移动和操作解耦了。还有一个关键认知vi 里删除的内容不是直接丢进垃圾桶而是会存到寄存器里。所以dd删掉一行后可以用p把它粘到别的位置。这在调整代码顺序时特别方便——dd下去光标移到目标位置按p一行就挪过去了。这就是很多人用 vi 调代码觉得顺手的原因之一。4.3 撤销、重做与重复撤销是u重做是Ctrlr这个好理解。但真正体现 vi 效率的是点号命令.它表示重复上一条操作。举个例子你给一个文件里连续三行行尾加分号。第一行用A;加完按 Esc第二行只需要按一个.第三行再按一个.。三行用三次按键搞定不用再把A;重复输入三遍。点号命令配合移动命令威力更大。比如你想连续删掉 5 个单词先按dw删第一个然后按5.重复 5 次。这种操作模式在批量调整格式、批量删除重复内容时极其高效。5. 搜索与替换处理文本的杀手锏5.1 搜索用 / 和 ? 快速定位前面已经提过/关键词向下搜索与之对应的是?关键词向上搜索。找到匹配项后用n跳到下一个、N跳到上一个。搜索时如果开启了高亮下一节讲所有匹配项都会被黄底标出来方便你评估修改范围。搜索还有一个很实际的问题高亮留在屏幕上看起来眼花缭乱。很多人以为要重新搜索才能取消其实用:noh就能临时取消高亮这也是我使用频率最高的命令之一。搜索特殊字符需要转义。比如想搜索一个 IP 地址1.2.3.4普通写法会把所有包含1和2和3之间任意字符的位置都匹配出来。正确写法是1\.2\.3\.4用反斜杠把点号转义为普通字符。还有/、*、[这些元字符同理。5.2 替换从单行到全文件的四种玩法vi 的替换命令格式是[范围]s/旧文本/新文本/修饰符。说它强大是因为范围可以精确控制。命令作用:s/old/new/替换当前行第一个匹配:s/old/new/g替换当前行所有匹配:%s/old/new/g替换全文件所有匹配:3,10s/old/new/g只替换第 3 到第 10 行:.,$s/old/new/g从当前行到文件末尾替换:%s/old/new/gc全部替换但逐个询问确认重点解释两个细节。第一%代表所有行它是1,$的简写。理解这个符号后你就能写出各种局部范围的替换命令了。比如在日志文件里你只关心第 500 行之后的 error就可以用:500,$s/error/warning/g。第二gc中的c是 confirm表示逐条确认。每次发现匹配vi 会提示y/n/a/q四个选项y 替换这处、n 跳过、a 全部替换、q 退出。这个选项在处理同一个词在不同语境有不同含义的场景时特别有用能避免误伤。实际案例把日志文件里的所有error改成warning。操作链路是先/error搜索确认大致数量——因为高亮能让你一眼看到分布——然后:%s/error/warning/g全量替换——最后:noh取消高亮。三分钟搞定一个原本可能要手工改几十处的工作。6. 效率翻倍可视模式、多文件操作与宏录制6.1 可视模式像鼠标一样选择文本可视化模式是 vim 在 vi 基础上最重要的增强之一它让你看到选择范围再操作。三种进入方式v字符选择模式。按 v 后移动光标扫过的区域逐字高亮。V行选择模式。按 V 后光标经过的整行被选中。Ctrlv块选择模式列模式。按 Ctrlv 后你可以选出一个矩形区域像用鼠标在编辑器里拖出一块列一样。前两种好理解块选择模式值得单独演示。经常有人问怎么给多行开头统一加#注释操作是这样的Ctrlv进入块选择选中需要注释的每一行的行首字符区域然后按Shifti大 I输入#最后按Esc所有选中行的行首都会出现#。这个技巧在批量注释代码、批量给配置项加前缀时能省下大量时间。块模式还能用来批量删除固定列。比如某些导入表格的数据前 5 列是 ID 不用保留用Ctrlv选中那几列直接d删掉列会对齐。这种操作在图形编辑器里反而不容易做vi 做起来却很利索。选中最常见的动作是删除和复制但别忘了可视模式也能配合替换。选中一段文本按:s/old/new/g替换范围会自动限制在选中区域内不需要手动算行号。6.2 多文件操作不再反复开关文件运维或开发时经常需要在两个文件之间来回对照修改。vi 提供的多文件方案是这样的:e 路径在当前窗口打开另一个文件:ls查看缓冲区列表已打开的文件:bn切换到下一个缓冲区:bp切换到上一个缓冲区:bd关闭当前缓冲区也可以启动时一次打开多个文件vim file1 file2然后在它们之间用:bn、:bp切换。这种模式的场景是你看file1里的配置要参照file2里的一个变量名不用退出再打开切来切去就好。有一类高级技巧叫窗口分屏用:sp或:vsp把屏幕分成上下或左右两块两侧同时看两个文件。我觉得新手不需要一上来就折腾分屏先把:bn、:bp用顺就足够了。6.3 宏录制让vi帮你做重复劳动宏机制的本质是把一串操作录下来之后一遍遍回放。录制步骤按qa开始录制到寄存器 a寄存器名字可以任意a-z 都行。依次执行你要重复的操作。按q结束录制。按a回放一次。按10a回放 10 次。举例说明。假设你要把一段 20 行的命令列表统一在行尾加一个分号。先手动操作第一行按A;按Esc就完成了第一行。但这只是一次操作不能解决剩下 19 行。正确的宏录制方式是按qa开始录制。按A;在行尾加分号按Esc。按j移动到下一行。按q结束录制。这样录制出来的宏包含 4 个动作到行尾加分号、退出插入、下移一行。之后按19a剩下的 19 行全部搞定。宏的威力在于它录制的不是结果而是操作链路所以它能适配不同长度的、不同位置的文本。宏和寄存器还有一层关系宏默认存在寄存器a里而这个寄存器同时也用于复制粘贴操作。你可以用ayy把当前行复制到寄存器 a用ap粘贴出来。宏和复制粘贴共用同一套寄存器体系理解了这一点你就能灵活组合各种操作。7. 从vi到vim配置文件与开发环境7.1 一个能直接抄的vimrcvi 自带的默认配置几乎没有任何个性化设置——没有行号、没有语法高亮、没有缩进辅助。现代 vim 环境下你通过一个~/.vimrc文件来做个性化定制。下面这份配置我用过很久可以直接抄set number set relativenumber set tabstop4 set shiftwidth4 set expandtab set autoindent set hlsearch set incsearch set ignorecase smartcase set cursorline syntax on set encodingutf-8 set fileencodingsutf-8,gbk逐项说明一下核心含义。set number显示绝对行号set relativenumber显示相对行号。为什么相对行号值得开因为在命令模式下你经常需要往下移动固定行数比如5dd删除 5 行、10j下移 10 行。相对行号让你一眼看到目标行离当前位置差几行直接按键不用来回数。set expandtab把 Tab 键自动转成空格tabstop和shiftwidth都设成 4这是目前最主流的缩进风格。如果你维护的代码风格用的是 Tab就把expandtab去掉。set ignorecase smartcase组合的意思是搜索时不分大小写但如果你的搜索词里包含大写字母就自动变成区分大小写。这个设计很聪明搜error能匹配Error搜Error就只匹配Error。set encodingutf-8和fileencodingsutf-8,gbk是中文环境必备。不设置的话打开 GBK 编码的文件就会出现乱码。写完配置后在 vi 里执行:source ~/.vimrc立即生效不用重启。7.2 插件分清必要和跟风虽然 vi 教程一般不涉及插件但既然讲 vim 就绕不开。我给你的建议是先把内置功能吃透再上插件。很多人安装了十几个插件最后常用的还是内置的搜索、替换、可视模式插件只是心理上的安全感。如果确实需要目前最稳妥的方案是 vim-plug。最小配置示例call plug#begin(~/.vim/plugged) Plug preservim/nerdtree Plug vim-airline/vim-airline call plug#end()装完在 vi 里执行:PlugInstall即可。但请记住插件不是越多越好。文件树、状态栏这种增强体验的可以装真正改变工作方式的核心还是熟练度。等你能盲打d$、yy、:%s这一层了再考虑花哨的功能不迟。7.3 不同系统上的vi差异有一个坑很多人在最小化安装的 Debian/Ubuntu 容器里会踩到敲vi打开文件发现没有语法高亮按方向键冒出来的不是移动光标而是A、B、C、D字符。这不是 vi 坏了而是系统安装的是vim.tiny——一个功能被裁剪得非常厉害的极简版 vim。解决办法很简单sudo apt install vim装上完整版 vim 后语法高亮、可视模式就都有了。在 CentOS/RHEL 系列上默认的 vi 通常就是完整 vim一般不用额外处理。8. 踩坑实录vi里的那些经典翻车现场8.1 CtrlS把终端冻住了在终端里编辑时不小心按到CtrlS屏幕像死机一样没有任何反应。这其实是终端输出被冻结了不是系统崩溃也不是 vi 的问题。按CtrlQ就能恢复。为什么会出现这个坑因为CtrlS是终端的软件流控快捷键它的历史比 vi 还早属于终端协议层面的行为。问题在于很多人习惯在文档编辑器里用CtrlS保存于是下意识在 vi 里也按一下然后就茫然了。所以记住vi 保存是:w不是CtrlS万一真碰到屏幕冻结CtrlQ解冻。8.2 按了CtrlZvi消失了文件没保存CtrlZ会把 vi 挂起到后台让你回到 shell 提示符看起来就像 vi 正常退出一样。但实际 vi 进程还在编辑的文件锁还在。如果你以为 vi 退出了再次执行vi 同文件名就会看到一个经典报错E325: ATTENTION Found a swap file by the name .nginx.conf.swp这个错误的意思是系统检测到存在交换文件怀疑你有另一个 vi 实例在编辑同一个文件或者上次的 vi 没有正常退出。正确的处理方式先执行fg把挂在后台的 vi 调回前台检查你的修改然后正常:wq保存退出交换文件会自动清理。如果你已经误删了交换文件可能会导致之前的修改丢失所以要谨慎。记住看到 E325先判断是不是自己还在后台挂着 vi别急着删 .swp 文件。8.3 方向键和退格键输出ABCD在 vim.tiny 或者其他极简 vi 环境里按方向键屏幕上蹦出A、B、C、D或者[[A这种字符原因是这些环境没加载完整的终端键码映射。解决办法按优先级排列安装完整 vimapt install vim或yum install vim-enhanced。检查环境变量echo $TERM确认是不是xterm-256color或linux。如果只有纯 vi 可用那就用 hjkl。顺带说一句这个坑其实是个很好的助推器——它强迫你把 hjkl 练成肌肉记忆。等你习惯 hjkl 之后回看方向键反而觉得累赘。8.4 只读文件、忘了sudo、:w! 不一定有效用 vi 打开一个只读文件后修改按:w!强制保存。在某些情况下这个命令确实能成功——比如文件只是被加了只读属性但目录有写权限。但在另一些情况下比如文件归 root 所有而你是一个普通用户w!也会失败。处理方式分两种。一种是老老实实退出后用 sudo 重新编辑。另一种就是我前面提过的应急技巧:w !sudo tee %这个命令违背直觉但它真的可以救急。原理是把当前缓冲区内容通过管道交给sudo tee利用 tee 的写入能力加上 sudo 的权限完成文件覆盖。我建议你把它记在本子上但日常操作还是老老实实sudo vi 文件更稳妥。8.5 中文乱码中文 Linux 服务器上vi 打开 GBK 编码的文件出现乱码是高频问题。根源在于 vi 默认用 UTF-8 解码文件碰到 GBK 的字节流自然是乱码。处理思路分两步:set encodingutf-8 :set fileencodingsutf-8,gbkfileencodings让 vi 在保存时按 UTF-8、GBK 顺序自动探测编码。如果文件本身是 GBK 且不想转换直接执行:set fileencodinggbk然后正常:wq文件还是保持 GBK 编码。如果想把 GBK 文件转成 UTF-8 再保存就把fileencoding设成utf-8。写在最后学 vi 像学骑自行车刚开始要记这记那掌握了之后就是肌肉记忆。我的建议是别背命令大全先把i、Esc、:wq、dd、yy、p、u、/这八个操作练到形成条件反射剩下的命令基本都是组合出来的。等你哪天发现手指自己在键盘上跳舞、眼睛不用看键盘了vi 就算是真正毕业了。最后分享一个真实习惯我现在编辑任何小文件都会下意识用 vi 而不是下载一个 GUI 编辑器。不是因为情怀只是因为肌肉记忆让我在写命令和改配置之间切换时压根不需要换工具。这种顺手才是 vi 最持久的魅力。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

模型优化器实战:从Adam显存优化到INT8量化部署全解析 2026/9/29 13:49:09

模型优化器实战:从Adam显存优化到INT8量化部署全解析

1. 模型优化器到底在解决什么问题第一次接触 Model-Optimizer 这个概念,是在一个推荐系统的排序模型上。当时线上推理延迟卡在 85ms 下不去,GPU 利用率却只有 30% 出头,团队里几个人盯着 Profiler 数据看了两天,最后发现问题不在模…

阅读更多 →
Altium Designer22实战指南:四层与高速PCB设计核心突破 2026/9/29 13:49:02

Altium Designer22实战指南:四层与高速PCB设计核心突破

1. 这本书到底解决了什么问题?——不是教程,是“设计现场”的生存手册Altium Designer 22 上架不到两周,我收到不下二十条微信问:“这本《Altium Designer22电子设计速成实战宝典》真值得买吗?”——问的人里&#xff…

阅读更多 →
计算机网络自顶向下运输层:TCP/UDP抓包与代码实战 2026/9/29 13:48:23

计算机网络自顶向下运输层:TCP/UDP抓包与代码实战

简介:这份PPT课件面向计算机专业学生及网络初学者,系统讲解计算机网络体系结构中的运输层核心知识,帮助读者从自顶向下的视角理解端到端通信机制。内容围绕运输层服务展开,涵盖多路复用与多路分解、UDP无连接传输、TCP面向连接传输…

阅读更多 →
Coze私有化部署与低代码边界深度解析 2026/9/29 13:48:16

Coze私有化部署与低代码边界深度解析

1. 项目概述:当Coze不再只是“扣子”,而是一套可拆解、可重构的企业级智能体底座最近三个月,我陆续接手了六家不同行业的客户咨询,核心诉求惊人地一致:不是问“Coze怎么搭个机器人”,而是直接甩来一句&…

阅读更多 →
Kali Linux工作流优化:zsh+GNOME+neofetch三层协同美化 2026/9/29 13:48:16

Kali Linux工作流优化:zsh+GNOME+neofetch三层协同美化

1. 项目概述:这不是换壁纸,是重构你的Kali工作流你打开Kali Linux,终端里还跑着默认的bash,字体小得眯眼才能看清,命令行提示符就一个干巴巴的rootkali:~#,连当前路径都懒得显示;桌面还是GNOME …

阅读更多 →
个人外汇业务联机接口报文规范V1.21实战:从字段提取到联调避坑 2026/9/29 13:48:09

个人外汇业务联机接口报文规范V1.21实战:从字段提取到联调避坑

简介:面向银行科技、接口开发及外汇业务运维人员的外汇局联机报文规范正式版本,定位为个人外汇业务系统与商业银行自身系统间实时交互的报文格式和标准依据。文档围绕结汇/购汇信息录入、补录、回执等接口场景,系统给出请求/响应报文结构、字…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉