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

秒变 Vim 高手:必学的编辑技巧与隐藏功能大揭秘

文章目录

  • 前言
  • 一、vi与vim
  • 二、Vim的三种模式
    • 1. 普通模式
    • 2. 插入模式
    • 3. 命令模式
  • 三、Vim中的查找与替换
    • 1. 查找
    • 2. 替换
  • 四、给Vim设置行号
    • 1. 临时显示行号
    • 2. 永久显示行号
  • 总结


前言

在Linux系统中,文本编辑器是开发者和系统管理员日常工作中的重要工具之一。其中,vi和vim是最常用的两个编辑器。本文将介绍vi和vim的基本区别,深入讲解vim的三种模式、常用操作,以及如何在命令模式下进行查找替换,最后会介绍如何在vim中显示行号。
在这里插入图片描述


一、vi与vim

vi (Visual Interface)Linux/Unix系统中内置的一个标准文本编辑器。虽然功能强大,但相对简洁,无法满足更高层次的编辑需求。vim (Vi IMproved) 是对vi的增强版,它在vi的基础上增加了许多功能,比如语法高亮、分屏操作、插件支持等。

vi和vim的区别:

  • 功能增强:vim支持语法高亮、插件、宏等功能,vi相对较为简陋。
  • 兼容性:vim完全兼容vi,因此使用vim进行简单的编辑工作与vi基本一致。
  • 可扩展性:vim支持丰富的扩展功能,用户可以根据需求安装插件。

如果你想使用vim,只需在终端输入vim命令。大多数现代的Linux发行版默认已安装vim,如果未安装可以通过以下命令安装:

sudo apt install vim  # 对于Debian/Ubuntu系统
sudo yum install vim  # 对于CentOS/Fedora系统

二、Vim的三种模式

Vim编辑器有三种主要的模式,每种模式都有其特定的操作方式:

  1. 普通模式 (Normal Mode):默认进入vim时所在的模式,主要用于浏览文件、删除、复制、粘贴等操作。
  2. 插入模式 (Insert Mode):允许用户输入和修改文本的模式。
  3. 命令模式 (Command Mode):用户可以执行文件保存、退出、查找、替换等操作。

1. 普通模式

在系统提示符后输入vim和想要编辑(或建立)的文件名,便可进入vim,如:
在这里插入图片描述
在这里插入图片描述

如果只输入vim,而不带文件名,也可以进入vim,相当于是使用帮助
在这里插入图片描述
在这里插入图片描述

进入vim之后,首先进入的就是普通模式,普通模式是vim的默认模式。在这个模式下,你可以通过移动光标、删除、复制和粘贴文本,还可以切换到其他模式。常见操作包括:

  • 移动光标:用hjkl分别移动光标到左、下、上、右
  • 删除操作:x删除光标下的字符,dd删除当前行
  • 复制与粘贴:yy复制当前行,p在光标之后粘贴

要回到普通模式,按下Esc键即可

2. 插入模式

在插入模式下,用户可以输入文本。进入插入模式的方法包括:
在这里插入图片描述

进入插入模式后,可以正常输入文本,编辑完成后按Esc返回到普通模式。
在这里插入图片描述

3. 命令模式

命令模式用于执行文件操作、查找替换等操作。进入命令模式的方法是在普通模式下按:,此时vim会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为命令模式的提示符,等待用户输入命令。
在这里插入图片描述
在命令模式下,常见操作有:

  • :w:保存
  • :w filename:另存为filename
  • :wq:保存退出
  • :wq filename:以filename为文件名保存后退出
  • :q!:不保存退出
  • :x:保存并退出,功能和:wq相同,其后可以跟文件名

通常退出vim命令为:wq:q!
在这里插入图片描述


三、Vim中的查找与替换

在命令模式下,vim提供了强大的查找与替换功能

1. 查找

首先按Esc键,进入命令模式;输入/?就可以进行查找了

例如:在一个文件中查找ll单词,然后在命令模式下输入:
/ll?ll
在这里插入图片描述

2. 替换

:[范围]s/查找内容/替换内容/[选项]

范围:指定替换的范围,比如%表示整个文件,1,10表示第1到第10行,不指定范围的话就是当前行
选项

  • g:全局替换,即每行中所有匹配的内容都替换
  • c:在替换前确认
  • i:忽略大小写

例子:

  1. 查找并替换当前行:
:s/old/new/g

这条命令会将当前行中的所有old替换为new
在这里插入图片描述

在这里插入图片描述

  1. 查找并替换整个文件:
:%s/old/new/g

这条命令会将文件中的所有old替换为new
在这里插入图片描述
在这里插入图片描述

  1. 全局替换并逐一确认:
:%s/old/new/gc

在替换前会逐个提示用户确认是否替换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


四、给Vim设置行号

在编写代码时,行号通常非常重要,vim提供了显示行号的功能。可以通过以下两种方式在vim中显示行号:

1. 临时显示行号

在vim中输入以下命令可以临时显示行号,退出vim后行号设置会恢复默认状态:

:set number

在这里插入图片描述
要关闭行号显示,可以使用:

:set nonumber

在这里插入图片描述

2. 永久显示行号

如果你希望每次打开vim时都显示行号,可以通过vim ~/.vimrc命令编辑vim配置文件.vimrc,在其中添加以下内容:

set number

保存配置后,行号会永久生效


总结

通过本文,我们详细介绍了如何在Linux环境下使用Vim编辑器进行文本编辑,并深入探讨了Vim的三种模式及其各自的操作方式。文章从vi与vim的区别开始,逐步讲解了Vim的普通模式、插入模式、命令模式的使用方法,特别是在命令模式下如何进行查找和替换操作。我们还展示了如何通过命令或配置文件来为Vim添加行号功能。希望这篇文章能帮助你更好地掌握Vim编辑器,提高在Linux系统中编辑文本的效率。如果你有任何疑问或建议,欢迎在评论区留言讨论🌹

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【设计模式】UML类图
  • Streamlit:使用 Python 快速开发 Web 应用
  • <<编码>> 第 16 章 存储器组织(4)--内存 示例电路
  • C++ ——日期类的实现和注释浅解
  • mysql性能优化-SQL 查询优化
  • 12年计算机408考研-计算机网络
  • 解密.bixi、.baxia勒索病毒:如何安全恢复被加密数据
  • 利用AI增强现实开发:基于CoreML的深度学习图像场景识别实战教程
  • 【深度学习】(1)--神经网络
  • 将成功请求的数据 放入apipost接口测试工具,发送给后端后,部分符号丢失
  • Arthas thread(查看当前JVM的线程堆栈信息)
  • Mastering Qt 番外 —— 添加源码调试
  • pg入门18—如何使用pg gis
  • Mybatis中sql数组为空判断
  • 3款免费的GPT类工具
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • input实现文字超出省略号功能
  • JavaScript 一些 DOM 的知识点
  • Javascript 原型链
  • java小心机(3)| 浅析finalize()
  • Python - 闭包Closure
  • Spring Boot MyBatis配置多种数据库
  • vue-router 实现分析
  • 大主子表关联的性能优化方法
  • 浅谈web中前端模板引擎的使用
  • 事件委托的小应用
  • 树莓派 - 使用须知
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​Spring Boot 分片上传文件
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2)nginx 安装、启停
  • (55)MOS管专题--->(10)MOS管的封装
  • (Oracle)SQL优化技巧(一):分页查询
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)springcloud实战之config配置中心
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • * 论文笔记 【Wide Deep Learning for Recommender Systems】
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .bat批处理(一):@echo off
  • .NET Core中的去虚
  • .NET 回调、接口回调、 委托
  • .NET 解决重复提交问题
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .net8.0与halcon编程环境构建
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • @EnableWebSecurity 注解的用途及适用场景
  • [20150707]外部表与rowid.txt
  • [20161101]rman备份与数据文件变化7.txt