Ubuntu/Linux必备:Vi编辑器核心模式与高效操作指南
1. 为什么在Ubuntu时代你依然绕不开Vi编辑器如果你刚接触Ubuntu或者Linux打开终端想编辑个配置文件比如/etc/hosts或者~/.bashrc你可能会习惯性地敲下nano或者gedit。但很快你会发现在很多生产服务器、Docker容器或者通过SSH远程连接的环境中gedit这种图形化编辑器根本不存在而nano也未必预装。此时那个几乎存在于所有Unix-like系统包括macOS中的编辑器——Vi或其增强版Vim——就成了你唯一、也是最可靠的选择。很多人对Vi的第一印象是“反人类”不能直接用方向键移动光标按i才能开始输入想保存退出还得记一串奇怪的命令。这感觉就像给你一辆手动挡跑车你却连离合器在哪都找不到。但一旦你掌握了它的基本操作你会发现它的高效是图形化编辑器难以比拟的。它完全在终端内运行不依赖图形界面响应速度极快并且通过键盘完成所有编辑操作让你的双手无需离开主键区这种流畅感是会上瘾的。无论是快速修改一行配置还是编写简单的脚本Vi都能让你事半功倍。所以无论你是系统管理员、开发者还是仅仅想更深入地使用Ubuntu的爱好者花点时间掌握Vi的基本操作都是一项极具性价比的投资。它不是一个需要你精通所有高级功能的庞然大物你只需要记住十几个最常用的命令就足以应对90%的日常编辑场景。这篇文章的目的就是帮你跨过那个最初的、令人困惑的门槛让你能自信地在任何终端环境下打开Vi完成编辑、保存、退出这一系列基本操作。2. Vi的两种核心模式理解它独特的工作逻辑Vi编辑器最让人困惑也最核心的设计就是它的模式Mode。这与我们熟悉的记事本、VS Code等“所见即所得”的编辑器截然不同。在那些编辑器里你打开文件光标闪动直接打字就是输入方向键移动光标Backspace删除一切都是直观的。Vi则把“移动光标/执行命令”和“输入文本”这两件事严格分开了通过不同的模式来管理。2.1 命令模式你的指挥中心当你用vi filename命令打开一个文件时首先进入的就是命令模式Command Mode也叫普通模式Normal Mode。在这个模式下你敲击的每一个字母键都不是在输入字符而是在向Vi下达指令。光标移动h左、j下、k上、l右。这最初是为了适配没有方向键的老式键盘现在已成经典。当然在大多数现代终端里方向键通常也能用但使用hjkl可以让你的手完全不离开主键区效率更高。删除字符将光标移动到一个字符上按x这个字符就被删除了。删除整行将光标移动到某一行按dd这一行就被剪切删除了。复制Yank一行按yy。粘贴Put按p会在光标下一行或右侧粘贴刚才复制或删除的内容。撤销Undo按u。这是最常用的命令之一。重做Redo在Vim中按Ctrl r。在命令模式下你就像一位指挥官用简洁的快捷键调度文本进行快速的定位、删除、复制和粘贴。所有编辑操作的基础都源于你能否熟练地在命令模式下移动光标。2.2 插入模式熟悉的文本输入区当你需要真正输入或修改文本时就必须从命令模式切换到插入模式Insert Mode。进入插入模式后你的键盘行为就变得和普通编辑器一样了打字输入字符方向键移动光标插入模式下的移动是临时的不高效。有多个命令可以从命令模式进入插入模式最常用的是i在当前光标位置之前插入。a在当前光标位置之后插入。o在当前行的下方新建一行并进入插入模式。I大写i将光标移动到当前行的行首并进入插入模式。A将光标移动到当前行的行尾并进入插入模式。一个非常重要的细节在插入模式下你是无法执行dd删除、yy复制等命令的。如果你在插入模式下不小心按了dd它只会输入两个字母“dd”到文本中。要执行命令你必须先按Esc键退出插入模式回到命令模式。2.3 末行模式执行文件级操作在命令模式下输入一个冒号:光标就会跳到屏幕底部进入末行模式Last Line Mode。这里主要用于执行一些文件级别的操作。:w保存文件Write。:q退出ViQuit。如果文件有修改而未保存这个命令会失败。:wq或:x保存并退出。这是最常用的退出方式。:q!强制退出不保存任何修改。那个感叹号!表示“强制”。当你改乱了文件想放弃所有更改时就用这个命令。:set nu显示行号number。:set nonu取消显示行号。:/搜索词在文件中向下搜索指定内容。按n跳转到下一个匹配项按N跳转到上一个。执行完末行命令比如按回车保存后Vi会自动回到命令模式。模式切换的心法你可以把Vi想象成一辆手动挡汽车。命令模式是“空挡”在这里你可以换挡准备执行命令。插入模式是“前进挡”你在这里踩油门输入文字。而Esc键就是“离合器”让你从任何挡位插入模式踩下回到空挡命令模式。大部分时间你都在“空挡”和“前进挡”之间频繁切换。3. 从零开始一个完整的Vi编辑实战流程光说不练假把式。让我们通过一个完整的例子把上述模式串联起来。假设我们要在Ubuntu的家目录下创建并编辑一个名为test.txt的文件。3.1 启动与初始状态打开终端输入命令vi test.txt如果test.txt不存在Vi会创建一个新文件的缓冲区如果存在则打开它。此时你处于命令模式。屏幕底部可能会显示文件名和状态如test.txt [新文件]。3.2 进入编辑插入文本按下i键。你会发现屏幕左下角出现-- 插入 --或-- INSERT --的提示这表示你已进入插入模式。现在像在普通文本编辑器里一样输入以下内容Hello, this is a test file. Learning Vi editor on Ubuntu is fun!输入完成后不要想着用鼠标点保存按钮。首先按下Esc键。屏幕底部的-- 插入 --提示消失这表示你已成功退回到命令模式。3.3 基础编辑复制、粘贴与删除假设我们想把第一行复制一份放在第二行后面。确保你在命令模式按过Esc。用k或上方向键将光标移动到第一行即“Hello...”那一行。按下yy。这一行就被复制yank到了Vi的剪贴板里。屏幕不会有明显变化。按下j或下方向键将光标移动到第二行即“Learning...”那一行。按下p。你会看到第一行的内容被粘贴put到了第二行的下方成为新的第三行。现在文件内容应该是三行。现在我们觉得第三行刚粘贴的那行是多余的想删除它。将光标移动到第三行。按下dd。这一行瞬间消失。一个实用技巧在命令模式下你可以在命令前加数字来执行多次。例如3dd会删除从光标行开始的三行2yy会复制两行。3.4 保存与退出安全操作文件编辑完成我们需要保存文件并退出。确保你在命令模式这是执行末行命令的前提。输入冒号:进入末行模式。光标会跳到底部。输入wq然后按回车。这个命令是:w保存和:q退出的组合。如果一切正常你会退出Vi回到终端命令行并看到命令提示符。你可以用cat test.txt命令查看文件内容确认修改已保存。踩坑实录如何处理修改后无法退出的情况这是新手最常遇到的“恐慌时刻”你做了一些修改然后输入:q想退出Vi却在底部提示E37: 已修改但尚未保存 (可用 ! 强制执行)。情况一你想保存修改。那就输入:wq保存并退出。情况二你不想保存刚才的修改想放弃所有更改直接退出。那就输入:q!。那个感叹号就是“强制”的意思告诉Vi“别管修改了立刻退出”4. 效率提升你必须掌握的导航与搜索技巧只会插入、保存、退出你只是能用Vi。要让它好用必须掌握高效的导航和搜索。4.1 超越hjkl的光标移动在命令模式下除了基础的hjkl还有更快的移动方式0数字零跳到当前行的行首。$跳到当前行的行尾。这是处理“删除行尾多余空格”或“在行尾添加内容”的利器。gg跳到文件第一行。G大写G跳到文件最后一行。:数字例如输入:10然后回车会直接跳转到第10行。结合:set nu显示行号后这个功能非常实用。Ctrl f向下翻页Forward。Ctrl b向上翻页Backward。4.2 在文件中快速搜索当配置文件有上百行时一行行找是不可能的。在命令模式下输入/进入搜索状态光标会跳到底部。输入你要找的关键词比如Error然后回车。Vi会将光标定位到第一个匹配Error的位置。如果高亮没开启可能不明显但光标已跳转。按n键光标会跳到下一个匹配项。按NShiftn键光标会跳到上一个匹配项。搜索的一个坑Vi的搜索默认是区分大小写的。如果你搜索error就找不到Error。你可以在搜索时用/error\c中的\c表示忽略大小写或者在末行模式用:set icignore case设置全局忽略大小写。4.3 文本块操作删除、复制与更改Vi允许你以非常精细的单位操作文本。dw删除从光标位置到下一个单词开头delete word。d$或D删除从光标位置到行尾的所有内容。d0删除从光标位置到行首的所有内容。cw删除从光标位置到单词结尾并立即进入插入模式change word。这非常适合修改一个变量名或参数值。你按cw后单词会被删除你直接输入新单词然后按Esc即可。cc删除整行并进入插入模式change line。相当于dd后再按i但更快捷。这些以d删除、c更改、y复制开头的命令后面可以跟上移动命令构成一个强大的组合。例如d}表示删除从光标位置到下一个段落结尾的所有内容。5. 个性化与进阶第一步让Vi更顺手原生的Vi功能比较基础。实际上在Ubuntu等大多数现代Linux发行版中当你输入vi命令时启动的往往是vimVi IMprovedVi的改进版。Vim完全兼容Vi但增加了大量强大功能如语法高亮、多级撤销、可视化模式等。你可以通过输入vim命令来明确使用它或者创建一个别名。5.1 启用显示行号和语法高亮为了让编辑更舒适有两个设置建议一开始就打开。在Vi/Vim中进入末行模式按:。输入:set number或简写:set nu然后回车行号就会显示在左侧。输入:syntax on然后回车就会根据文件类型如.sh,.py,.conf启用语法高亮。但这样设置只对当前会话有效。退出重开后就没了。要永久生效需要编辑Vi/Vim的配置文件。5.2 创建简单的配置文件Vi的全局配置文件是/etc/vim/vimrc但通常我们修改用户个人的配置文件~/.vimrc如果不存在就创建它。在终端输入vi ~/.vimrc按i进入插入模式输入以下常用配置 显示行号 set number 启用语法高亮 syntax on 设置Tab键为4个空格 set tabstop4 set shiftwidth4 set expandtab 在输入括号时光标会短暂跳转到匹配的括号处 set showmatch 搜索时忽略大小写 set ignorecase按Esc回到命令模式输入:wq保存退出。从此以后你每次打开Vi/Vim都会自动应用这些设置编辑体验会好很多。5.3 遇到“纯Vi”环境怎么办在一些极度精简的Docker镜像或嵌入式系统中可能只安装了最原始的vi而不是vim。这时.vimrc配置和syntax on等Vim特有命令可能无效。你更需要依赖本文前半部分介绍的、纯粹的Vi基本命令。一个快速判断的方法是在编辑器内输入:version看看输出信息。最后的建议不要试图一次性记住所有命令。先从i,Esc,:wq,:q!,dd,yy,p,/搜索这几个最核心的命令开始用。在每天的使用中有意识地去尝试一两个新命令比如今天用$跳到行尾明天用cw改个单词。肌肉记忆的形成需要时间但一旦形成你在终端里处理文本的效率将产生质的飞跃。当你发现自己能不假思索地用键盘完成所有编辑时你会感谢当初决定学习Vi的自己。

相关新闻