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这个命令开始一步步探索这个经典编辑器背后的高效世界。

相关新闻

简单流水CPU(只考虑数据冲突)

简单流水CPU(只考虑数据冲突)

一、CPU设计框图二、各模块代码1. 流水段寄存器IF/IDtimescale 1ns / 1psmodule if_id(input clk,input resetn,input enable,input [31:0] PC,input [31:0] IR,output [31:0] IF_ID_PC,output [31:0] IF_ID_IR );reg [31:0] IF_ID_1PC,IF_ID_1IR;always (posedge clk or neged…

2026/10/4 1:29:03 阅读更多 →
解决IDEA中Gradle下载卡顿:原理分析与镜像配置实战

解决IDEA中Gradle下载卡顿:原理分析与镜像配置实战

1. 项目概述:当IDEA遇上Gradle下载难题如果你是一名Java或Android开发者,使用IntelliJ IDEA(以下简称IDEA)创建或导入Gradle项目时,大概率遇到过这个让人烦躁的“卡点”:项目初始化或打开时,IDE…

2026/10/6 6:49:20 阅读更多 →
工商银行集成金蝶云星空解决方案

工商银行集成金蝶云星空解决方案

业务背景源系统成集云目标系统工商银行金蝶云星空企业使用工商银行管理银企直连、交易流水等资金业务,使用金蝶云星空实现业财一体化核算。两套系统数据独立、流程割裂,导致交易流水重复录入、银企对账手工操作效率低、资金凭证人工制作易出错、业财数据…

2026/9/28 23:35:56 阅读更多 →

最新新闻

江苏轨道交通专用原子灰源头厂家合作实力参考:原子灰快干不踩坑选择指南

江苏轨道交通专用原子灰源头厂家合作实力参考:原子灰快干不踩坑选择指南

江苏地区不少轨道交通装备制造企业在挑选原子灰时,最关心的无非两件事:能不能快速干透、会不会返工踩坑。无锡市涂料有限公司作为深耕工业找平腻子三十余年的源头厂家,其锡德原子灰系列,尤其是MT-005轨道交通专用水性原子灰&#…

2026/10/11 9:33:43 阅读更多 →
电力系统同步相量计算:FFT、窗函数、HHT与小波变换的Matlab实现与对比

电力系统同步相量计算:FFT、窗函数、HHT与小波变换的Matlab实现与对比

先声明一下,这个项目本身不算新,但确实是电力系统同步相量测量领域绕不开的经典组合。FFT、窗函数法、希尔伯特-黄变换、小波变换,四种方法放在一起做电力系统同步相量计算,听起来像是拼盘,实际做下来会发现它们各有各…

2026/10/11 9:33:43 阅读更多 →
MFC多选下拉框CCheckComboBox:VS2008SP1集成与避坑指南

MFC多选下拉框CCheckComboBox:VS2008SP1集成与避坑指南

简介:这份资源面向在 VS2008SP1 环境下使用 VC 开发界面的程序员,聚焦复选下拉框(CCheckComboBox)的实现与使用。核心文件 CheckComboBox.h 与 CheckComboBox.cpp 封装了复选下拉框的完整功能,可直接集成到 MFC 项目中…

2026/10/11 9:33:43 阅读更多 →
如何使用 uiverse-io/galaxy:一个超过 3000 个免费 UI 元素的宝藏库

如何使用 uiverse-io/galaxy:一个超过 3000 个免费 UI 元素的宝藏库

如何使用 uiverse-io/galaxy:一个超过 3000 个免费 UI 元素的宝藏库 相关地址名称地址GitHub 仓库(源代码)uiverse-io/galaxy官网(推荐浏览入口)uiverse.io/MCP 服务器配置参考在 AI 工具的 MCP 配置中加入 uiverse-mc…

2026/10/11 9:33:43 阅读更多 →
游戏引擎渲染系统架构:从命令队列到Render Graph的范式升级

游戏引擎渲染系统架构:从命令队列到Render Graph的范式升级

1. 项目概述:为什么渲染系统是游戏引擎的“心脏”,而不是“画笔”“游戏引擎架构深度解析(二):渲染系统架构”——这个标题里,“渲染系统”四个字看似平平无奇,但在我过去十年参与过的十几个中大…

2026/10/11 9:33:43 阅读更多 →
Web自动化测试核心指南:选型、定位、等待与CI/CD集成

Web自动化测试核心指南:选型、定位、等待与CI/CD集成

1. 项目概述1.1 Web自动化到底是做什么的Web自动化,简单说就是让脚本代替人手去操作浏览器。点击按钮、填写表单、翻页加载、数据抓取、重复性功能验证,这些事情一旦交给自动化脚本,就可以24小时不休息地执行。很多团队拿它做回归测试、接口冒…

2026/10/11 9:32:43 阅读更多 →

日新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/11 0:00:27 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →