ARTICLE DETAIL

建站实战干货

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

Ubuntu中Vi/Vim编辑器核心模式与高效编辑命令详解

2026/8/14 5:34:49 拓冰建站 浏览量
Ubuntu中Vi/Vim编辑器核心模式与高效编辑命令详解 1. 项目概述为什么在Ubuntu世界里Vi/Vim依然是绕不开的“瑞士军刀”如果你刚接触Ubuntu或者任何Linux发行版打开终端想编辑一个配置文件比如网络设置或者SSH密钥十有八九会有人告诉你“用vi或者vim编辑一下那个文件”。然后你输入vi filename屏幕一闪进入了一个看似简单却又完全陌生的界面——光标在动但键盘输入字母却变成了奇怪的命令想退出都找不到门路最后可能只能尴尬地强制关闭终端。这个经历几乎是每个Linux新手的“必修课”。我刚开始用Ubuntu做开发时也在这个坑里挣扎了很久一度觉得这个编辑器反人类。但十几年用下来尤其是在没有图形界面的服务器上做运维和开发我不得不承认熟练使用Vi/Vim是从“Linux用户”进阶到“Linux玩家”的关键一步。ViVisual Editor的简称是一个历史悠久的屏幕文本编辑器而VimVi IMproved是其增强版在绝大多数Linux系统包括Ubuntu中都是预装或默认安装的。它之所以历经数十年而不衰核心在于其模态编辑哲学将“移动光标”和“编辑文本”这两个操作彻底分离。在普通模式下你的每一次击键都是一个高效命令如删除单词、复制行、跳转到行尾而不是插入字符只有当你明确进入插入模式键盘才变回我们熟悉的输入工具。这种设计让双手无需离开键盘主区就能完成极其复杂的文本编辑任务效率远超依赖鼠标的图形编辑器。在Ubuntu中无论是修改系统配置/etc下的各种文件、编写脚本、还是查看日志Vi/Vim都是最直接、最可靠的工具。理解它的基本操作不是一种选择而是一种必需。2. Vi/Vim的三种核心模式与状态切换理解Vi/Vim首要就是理解它的模式。这是它与其他所有编辑器最根本的不同也是新手最大的困惑来源。你可以把它想象成一辆手动挡汽车有倒挡普通模式、空挡命令行模式和前进挡插入模式你得知道当前在哪个挡位以及如何换挡。2.1 普通模式你的指挥中心这是启动Vi/Vim后的默认模式。在这个模式下你不能直接输入文本但你可以用单个按键或组合键向编辑器发出各种命令。整个文本缓冲区就像你的战场而你的手指就是指挥军队的将军。移动光标h左、j下、k上、l右。这最初是为了适配没有方向键的老式键盘现在则成了高效操作的肌肉记忆基础。跳转0跳到行首$跳到行尾gg跳到文件第一行G跳到文件最后一行:行号如:50跳转到指定行。复制、删除与粘贴yy复制当前行dd删除剪切当前行p在光标后粘贴。你可以在这些命令前加数字表示操作多行例如3yy复制三行5dd删除五行。注意很多新手卡在普通模式是因为他们下意识地开始打字却发现屏幕上的字符变得乱七八糟。记住只要你不是在输入文本就应该保持在普通模式。如果迷失了无脑按几次Esc键总能让你回到安全的普通模式。2.2 插入模式文本输入状态这是最像其他编辑器的模式。在此模式下你的按键会直接作为文本输入到缓冲区中。从普通模式进入插入模式有多个“入口”每个入口决定了你从何处开始插入i在光标前插入。a在光标后插入。I在当前行首插入。A在当前行尾插入。o在当前行下方新建一行并插入。O在当前行上方新建一行并插入。进入插入模式后屏幕左下角通常会显示-- INSERT --或类似的提示。输入完成后按Esc键即可返回普通模式。2.3 命令行模式执行高级指令在普通模式下输入冒号:、问号?或斜杠/光标就会跳到屏幕底部进入命令行模式。这里可以执行文件操作、搜索替换、退出编辑器等更复杂的命令。:w保存文件。:q退出编辑器如果文件有修改未保存会报错。:wq或:x保存并退出。:q!强制退出不保存任何修改。:set nu显示行号。:set nonu取消显示行号。/关键词向下搜索关键词按n查找下一个N查找上一个。?关键词向上搜索关键词。模式切换是Vi/Vim操作的基石我建议新手在桌面创建一个便签把最常用的模式切换命令i、Esc、:、/写下来直到形成肌肉记忆。一旦掌握了模式切换你就已经突破了Vi/Vim最大的学习障碍。3. 核心编辑命令从生存到熟练掌握了模式我们就可以开始真正地编辑文本了。以下命令都是在普通模式下执行的它们构成了日常编辑的“工具箱”。3.1 光标移动与定位高效移动是高效编辑的前提。除了基础的h/j/k/l以下命令能让你在文件里“瞬移”。单词级移动w移动到下一个单词的词首。b移动到上一个单词的词首。e移动到当前单词的词尾。行内跳转0绝对行首。^跳到本行第一个非空白字符。$绝对行尾。屏幕与文件级跳转Ctrlf向下翻一页。Ctrlb向上翻一页。H跳到当前屏幕的第一行。M跳到当前屏幕的中间行。L跳到当前屏幕的最后一行。gg文件顶部。G文件底部。:数字跳转到指定行例如:127跳转到第127行。这在查看编译错误或日志时极其有用。3.2 文本删除、复制与粘贴Vi/Vim的删除、复制操作本质上是将文本内容放入一个叫“寄存器”的剪贴板中然后用粘贴命令取出。删除x删除光标下的字符。dw删除从光标位置到下一个单词词首的内容。d$或D删除从光标到行尾的内容。dd删除整行。d数字j向下删除多行例如d5j删除当前行及下面4行。复制yy复制当前整行。yw复制从光标到下一个单词词首的内容。y$复制从光标到行尾的内容。粘贴p在光标后粘贴。如果复制的是整行则在当前行下方粘贴。P在光标前粘贴。如果复制的是整行则在当前行上方粘贴。实操心得dd、yy这些命令实际上执行的是“剪切”和“复制到寄存器”。这意味着你dd删除一行后立刻可以用p把它粘贴到别处实现移动效果。这是Vi/Vim编辑流畅性的一个关键设计。3.3 撤销、重做与重复人总会犯错Vi/Vim提供了简单明了的补救方式。u撤销上一次操作。可以连续按u进行多次撤销。Ctrlr重做即撤销刚才的撤销操作。.重复上一次的编辑操作。这是一个威力巨大的命令。例如你刚用dw删除了一个单词将光标移到另一个单词上按一下.就自动执行dw删除它效率倍增。4. 高级搜索、替换与多文件操作当你需要批量修改代码或配置时搜索替换功能就变得至关重要。Vi/Vim在此方面的能力非常强大。4.1 搜索与替换命令详解搜索替换主要在命令行模式下完成其基本语法是:范围 s/搜索模式/替换内容/标志。范围%代表整个文件最常用。1,10代表第1行到第10行。.,$代表从当前行到文件末尾。搜索模式支持正则表达式这使得匹配非常灵活。替换内容要替换成的文本。标志g一行内全局替换默认只替换每行的第一个匹配项。i忽略大小写。c每次替换前需要确认。常用示例:%s/foo/bar/g将整个文件中所有的foo替换为bar。:10,20s/^/# /g在第10到20行的行首添加#用于注释代码块。:%s/old/new/gc全局替换old为new但每次替换前会询问[y/n/a/q/l/^E/^Y]?。其中y替换n不替换a替换所有q退出l替换当前并退出。4.2 多文件编辑与缓冲区管理在终端中你可以用vim file1 file2 file3的方式同时打开多个文件。Vi/Vim会将这些文件加载到不同的“缓冲区”中。:ls或:buffers列出所有缓冲区及其编号和状态。:b 编号或:b 文件名切换到指定缓冲区。例如:b2切换到2号缓冲区:b main.c切换到文件名为main.c的缓冲区。:bn切换到下一个缓冲区。:bp切换到上一个缓冲区。:bd关闭当前缓冲区如果文件未保存需要加!强制关闭。多文件编辑对于在多个相关配置文件或源代码文件间切换非常方便避免了反复打开关闭文件的麻烦。5. 自定义配置与效率提升技巧默认的Vi/Vim配置可能比较简陋但它是高度可配置的。通过修改用户主目录下的~/.vimrc配置文件可以极大提升使用体验。以下是一些我强烈推荐的配置。5.1 基础配置项在你的~/.vimrc文件中添加以下行 开启语法高亮 syntax on 显示行号 set number 高亮显示当前行 set cursorline 将Tab键和退格键的行为设置为更符合习惯 set tabstop4 一个Tab显示为4个空格宽度 set softtabstop4 按退格键时一次删除4个空格 set shiftwidth4 自动缩进时的宽度为4空格 set expandtab 将输入的Tab自动转换为空格有利于代码风格统一 搜索时实时高亮匹配结果 set incsearch 搜索忽略大小写 set ignorecase 当搜索模式包含大写时智能区分大小写 set smartcase 自动缩进继承上一行的缩进方式 set autoindent 智能缩进对于C类语言特别有用 set smartindent 允许在未保存文件时切换缓冲区 set hidden保存~/.vimrc后重新打开Vim即可生效。这些配置能让你在编写代码或脚本时获得类似现代编辑器的舒适体验。5.2 高效操作组合与思维Vi/Vim的强大在于命令的组合。其通用语法是[数字] 操作符 [移动命令]。d2w删除2个单词。c$删除从光标到行尾并进入插入模式c是change的缩写比d$再按i更高效。yG复制从当前行到文件末尾的所有内容。G从当前行开始向右缩进直到文件末尾。这种“动词名词”的结构让编辑操作变得极具表达力。你的思维从“用鼠标选中那段文字”变成了“删除到下一个段落开头”d}效率的提升是指数级的。6. 常见问题与排查技巧实录即使熟悉了命令在实际使用中还是会遇到各种问题。下面是我总结的一些高频“坑点”和解决方法。6.1 启动与退出异常问题打开文件后屏幕显示一片混乱有~符号底部显示[已转换]或编码错误。排查这通常是文件编码问题。可以用:set fileencoding查看当前Vim认为的编码用:set fileencodingutf-8强制设为UTF-8最通用。在编辑Windows传过来的文件时尤其常见。问题修改文件后输入:q无法退出提示E37: No write since last change (add ! to override)。排查这是Vi/Vim在提醒你文件已被修改但未保存。你有三个选择1):wq保存并退出2):q!放弃所有修改并强制退出3) 按Esc回到普通模式继续编辑。问题不小心进入了可视模式Visual Mode或替换模式Replace Mode不知道怎么退出。排查无脑按Esc。可视模式下底部会显示-- VISUAL --替换模式下会显示-- REPLACE --。Esc是返回普通模式的万能钥匙。6.2 操作失误与恢复问题误操作删除了大量内容如何恢复排查立即按u撤销。Vi/Vim的撤销树在较新版本中功能强大但基础撤销u足以应对大部分误删。如果已经做了其他操作可以尝试:earlier 5m回到5分钟前的状态。问题粘贴外部代码时格式完全乱套了缩进错乱。排查这是因为Vi/Vim的自动缩进功能在作祟。在粘贴前先输入:set paste进入粘贴模式然后再进行粘贴操作。粘贴完成后输入:set nopaste恢复正常模式。这是一个极其重要的技巧必须掌握。6.3 环境与配置问题问题在Ubuntu上有时输入vi打开的是vim有时又感觉功能很简陋像是vi。排查Ubuntu通常通过/usr/bin/vi这个软链接指向/usr/bin/vim但可能是一个精简版的vimvim-tiny。你可以通过vim --version查看版本。我建议直接安装完整功能的Vimsudo apt update sudo apt install vim。之后你可以用alias vivim将vi命令也指向完整的Vim。问题.vimrc配置不生效。排查首先检查文件位置是否正确~/.vimrc。其次检查配置语法是否有误可以用vim -c source ~/.vimrc命令测试加载该配置文件是否会报错。最后有些配置需要重启Vim才能生效。掌握Vi/Vim是一个从“痛苦”到“舒适”再到“依赖”的过程。它最初的学习曲线确实陡峭但一旦你习惯了这种手不离键盘的编辑方式你就会发现在命令行环境中处理文本的效率有了质的飞跃。它不再是那个令人恐惧的“黑盒子”而是你手中一把得心应手的利器。从今天起尝试在Ubuntu中用它来编辑你的下一个脚本或配置文件从:wq这个命令开始一步步探索这个经典编辑器背后的高效世界。