当前位置: 首页 > news >正文

Linux 基础:Vi/Vim 编辑器

一、Vi 与 Vim 的核心区别

Vim 是 Vi 的进阶版本,二者在起源与功能上既有传承也有明显差异,具体对比如下:

  • Vi(Visual Editor)
    1976 年由 BSD Unix 核心开发者 Bill Joy 设计,是 Unix 系统原生自带的轻量级文本编辑器。受早期硬件资源限制,Vi 仅提供文本编辑核心功能(如基础光标移动、简单增删改),但首次提出“模式化编辑”理念,为后续编辑器奠定了操作范式。

  • Vim(Vi IMproved)
    1991 年由荷兰程序员 Bram Moolenaar 开发,初衷是“改进 Vi 的体验”,因此在完全兼容 Vi 操作逻辑的基础上,新增了大量实用功能,解决了 Vi 的诸多局限:

    • 语法高亮(支持不同编程语言的代码着色,提升可读性)
    • 多级撤销/重做(可回溯多步操作,避免误操作损失)
    • 插件扩展系统(支持通过插件增强功能,如自动补全、代码格式化)
    • 多文件/多窗口编辑(可同时打开多个文件,或拆分窗口对比编辑)
    • 强化搜索替换(支持正则表达式,可实现精准的全局替换)

如今主流 Linux/Unix 系统中,输入 vi 命令实际调用的往往是 Vim 的“兼容模式”,无需额外配置即可沿用 Vi 的操作习惯,兼顾兼容性与功能丰富性。

二、Vim 的三种核心模式:理解模式化编辑

Vim 的“模式化编辑”是其与记事本、VS Code 等编辑器的最大区别——不同模式对应不同操作场景,切换模式是高效使用 Vim 的关键:

1. 命令模式(默认启动模式)

打开 Vim 后自动进入的模式,核心作用是“控制操作”而非“输入文本”:

  • 基础功能:移动光标、文本删改、复制粘贴,以及切换到其他模式;
  • 常用示例:dd 删除当前行(若需删除 3 行,可输入 3dd)、yy 复制当前行、p 粘贴到光标下方、h/l/k/j 分别控制光标左/右/上/下移动。

2. 输入入模式(文本输入模式)

仅用于“输入文字”,需从命令模式通过特定按键触发,不同按键对应不同插入位置:

  • 触发方式:i(在光标插入)、a(在光标插入)、o(在当前行下方新建空白行并插入);
  • 退出方式:按 Esc 键即可返回命令模式(建议养成“输入完立即退到命令模式”的习惯,减少误操作)。

3. 底线命令模式(Ex 模式)

通过命令模式按 : 触发,光标会移至窗口底部,用于执行“文件管理”“全局操作”等高级命令:

  • 常用场景:保存、退出、搜索替换、文件跳转;

  • 典型命令::w(保存文件)、:q(退出 Vim,未保存时无法退出)、:wq(保存并退出)、:q!(强制退出,放弃所有未保存修改)、:%s/旧内容/新内容/g(全文替换,% 代表“全文”,g 代表“全局替换”)。

    在这里插入图片描述

图:Vim 三种核心模式的切换关系示意图

三、Vim 常见操作速查表

为方便快速查阅,以下整理了日常使用中高频操作的按键与说明:

操作场景按键/命令补充说明
打开/新建文件vim 文件名若文件不存在,Vim 会在保存时自动新建该文件
光标移动h(左)l(右)k(上)j(下)无需依赖方向键,适合盲打,提升操作效率
删除指定行数数字 + dd(如 3dd单独 dd 仅删除当前行,加数字可批量删除
复制指定行数数字 + yy(如 2yy单独 yy 仅复制当前行,复制后用 p 粘贴
粘贴内容p粘贴到光标下方(若想粘贴到上方用 P
撤销上一步操作u支持多级撤销,可连续按 u 回溯多步
重做撤销操作Ctrl + r恢复被误撤销的操作
文本搜索/关键词n 跳至下一个结果,N 跳至上一个
全文替换:%s/旧内容/新内容/g若需确认每处替换,可在末尾加 c(如 :%s/旧/新/gc
保存文件:w可搭配文件名保存为新文件(如 :w 新文件名
保存并退出:wq:x二者功能一致,:x 在文件未修改时不会更新修改时间
强制退出(不保存):q!适用于误编辑后无需保留修改的场景

四、Vim 的核心优势:为何至今仍被广泛使用?

尽管市面上有众多图形化编辑器,但 Vim 仍是开发者、运维人员的常用工具,核心优势体现在以下几点:

  • 轻量且普适:占用系统资源极少,即使在低配服务器或嵌入式设备上也能流畅运行;且几乎所有 Linux/Unix 系统(包括 macOS)都预装 Vim,无需额外安装即可使用。
  • 远程编辑利器:无需图形界面支持,通过 SSH 连接远程服务器后,直接输入 vim 文件名 即可编辑文件,避免了“本地编辑→上传服务器”的繁琐流程,是服务器运维的核心工具之一。
  • 可扩展的功能生态:通过插件可无限拓展能力,例如:
    • 自动补全:插件 YouCompleteMe 支持多种语言的智能补全;
    • Git 集成:插件 vim-fugitive 可在 Vim 内直接执行 Git 命令;
    • 文件导航:插件 NERDTree 提供可视化文件树,方便切换目录。
  • 高效的编辑体验:熟悉模式化操作后,可通过“键盘快捷键组合”完成复杂操作(如 d3w 删除3个单词、y$ 复制到行尾),减少鼠标依赖,编辑效率远超传统编辑器。

Vim 的“模式切换”可能需要短暂适应,但一旦掌握,其高效性会成为长期使用的核心动力。

http://www.dtcms.com/a/394937.html

相关文章:

  • K8s和Service Mesh如何强化微服务治理能力
  • 知识图谱赋能自然语言处理的深层语义分析:技术、影响与前沿趋势
  • 论文笔记:How Can Recommender Systems Benefit from Large Language Models: A Survey
  • idea终端添加git-bash,支持linux的shell语法
  • MITRE ATLAS对抗威胁矩阵:守护LLM安全的中国实践指南
  • 常见的 Web 项目性能优化方法有哪些?​​也适用于首页
  • Qt QMainWindow类深度解析:主窗口框架的核心实现
  • 知识图谱对自然语言处理深层语义分析的革命性影响与启示
  • 内部标识符
  • 计算机网络2
  • 计算机视觉(opencv)实战三十二——CascadeClassifier 人脸微笑检测(摄像头)
  • MyBatis-Plus 全方位深度指南:从入门到精通
  • PyTorch 神经网络工具箱:从组件到基础工具,搭建网络的入门钥匙
  • 分布式专题——18 Zookeeper选举Leader源码剖析
  • JVM 调优在分布式场景下的特殊策略:从集群 GC 分析到 OOM 排查实战(二)
  • 基于OpenEuler部署kafka消息队列
  • Flink TCP Channel复用:NettyServer、NettyProtocol详解
  • Sass和Less的区别【前端】
  • Kotlin互斥锁Mutex协程withLock实现同步
  • Seedream 4.0 测评|AI 人生重开:从极速创作到叙事实践
  • vscode clangd 保姆教程
  • MySQL时间戳转换
  • 【Spark+Hive+hadoop】基于spark+hadoop基于大数据的人口普查收入数据分析与可视化系统
  • 分布式专题——17 ZooKeeper经典应用场景实战(下)
  • TDengine 2.6 taosdump数据导出备份 导入恢复
  • 探索 Yjs 协同应用场景 - 分布式撤销管理
  • 【软考中级 - 软件设计师 - 基础知识】数据结构之栈与队列​
  • LeetCode 385 迷你语法分析器 Swift 题解:从字符串到嵌套数据结构的解析过程
  • windows系统使用sdkman管理java的jdk版本,WSL和Git Bash哪个更能方便管理jdk版本
  • 生产环境K8S的etcd备份脚本