Vim工具使用全攻略:从入门到精通
引言
在软件开发的世界里,Vim不仅仅是一个文本编辑器,它是一个让你的编程效率倍增的神器。然而,对于新手来说,Vim的学习曲线似乎有些陡峭。本文将手把手教你如何从Vim的新手逐渐变为高手,深入理解Vim的操作模式,并掌握一些实用的技巧。
Vim的基本概念
Vim,一款自诞生以来就以其强大和灵活性著称的文本编辑器,其独特之处在于它的模式化操作,这也是它与其他编辑器最大的不同。理解Vim的模式对于掌握Vim至关重要。
Vim的工作模式
Vim的工作方式大致可以分为三种基本模式,每种模式下的键入操作都有不同的含义,这三种模式分别是:
-
正常模式(Normal Mode):
- 这是Vim的默认模式。在这个模式下,你可以使用快捷键执行复制、粘贴、移动、删除等操作。这些操作都是基于文本行或字符的,而不是用于输入文本。正常模式是Vim中最强大的模式,因为它提供了许多命令来快速修改文本。
-
插入模式(Insert Mode):
- 在插入模式下,你可以输入文本。这个模式类似于其他文本编辑器的常态。在Vim中进入插入模式的方法有多种,包括但不限于按下
i
(在光标前插入)、I
(在当前行首插入)、a
(在光标后插入)、A
(在当前行尾插入)、o
(在当前行之下新开一行插入)、O
(在当前行之上新开一行插入)等。
- 在插入模式下,你可以输入文本。这个模式类似于其他文本编辑器的常态。在Vim中进入插入模式的方法有多种,包括但不限于按下
-
末行模式(Command-Line Mode or Last Line Mode):
- 在末行模式下,你可以输入一些命令,比如保存文件、查找和替换文本、打开新文件或者退出Vim等。这个模式通常用于执行那些影响整个文档的操作。进入这个模式的方法是在正常模式下按下
:
,然后在屏幕底部的命令行中输入命令。
- 在末行模式下,你可以输入一些命令,比如保存文件、查找和替换文本、打开新文件或者退出Vim等。这个模式通常用于执行那些影响整个文档的操作。进入这个模式的方法是在正常模式下按下
Vim的其他模式
除了上述三种基本模式外,Vim还有其他一些模式,包括但不限于:
-
可视模式(Visual Mode):
- 在这个模式下,你可以用光标选择文本块,然后执行复制、粘贴等操作。进入这个模式的方法是在正常模式下按
v
(字符选择)、V
(行选择)或Ctrl + v
(块选择)。
- 在这个模式下,你可以用光标选择文本块,然后执行复制、粘贴等操作。进入这个模式的方法是在正常模式下按
-
替换模式(Replace Mode):
- 这个模式允许你替换光标所在位置的字符。进入这个模式的方法是在正常模式下按
R
,然后每输入一个字符,就会替换掉光标下的字符。
- 这个模式允许你替换光标所在位置的字符。进入这个模式的方法是在正常模式下按
-
执行模式(Ex Mode):
- 类似于末行模式,但用于执行更复杂的编辑命令。可以在正常模式下通过输入
Q
进入。
- 类似于末行模式,但用于执行更复杂的编辑命令。可以在正常模式下通过输入
模式的转换
掌握Vim的关键之一是理解这些模式之间是如何相互转换的。例如,从正常模式进入插入模式可以通过多种方式,而从插入模式回到正常模式则通常是通过按ESC
键。
理解并熟练运用这些模式及其转换,是提高在Vim中编辑效率的关键。Vim之所以强大,就在于它能够让用户通过不同的模式和命令组合来实现高效的文本编辑。

2:输入i进入插入模式:
此时可以正常输入文本,要想退出我们需要先输入ESC进入命令模式后输入shift+; (也就是:)进入底行模式 然后输入wq即可退出
Vim的基本操作
掌握Vim的操作几乎等同于掌握了一种新语言。以下是一些基本而重要的操作,它们构成了使用Vim时的基础。
文件操作
-
打开文件:
- 使用命令
vim 文件名
来打开或创建文件。如果文件不存在,Vim将会创建一个新文件并等待你的输入。
- 使用命令
-
保存文件:
- 在末行模式下,输入
:w
保存你的更改。如果你想另存为一个新文件,可以使用:w 新文件名
。
- 在末行模式下,输入
-
关闭Vim:
- 要退出Vim并保存更改,可以在末行模式下输入
:wq
或者:x
。如果想退出但不保存更改,可以使用:q!
。
- 要退出Vim并保存更改,可以在末行模式下输入
编辑操作
-
插入文本:
- 如之前提到的,有多种方式进入插入模式以编辑文本,包括
i
(光标前插入)、I
(行首插入)、a
(光标后插入)、A
(行尾插入)等。
- 如之前提到的,有多种方式进入插入模式以编辑文本,包括
-
删除文本:
- 在正常模式下,
x
可用于删除光标下的字符。dd
用于删除整行。如果想删除多行,可以使用d
加上数字,例如2dd
删除两行。
- 在正常模式下,
-
复制和粘贴:
yy
是复制当前行,p
是粘贴到光标后。如果想复制多行,可以使用y
加上数字,例如2yy
复制两行。
-
撤销和重做:
u
用于撤销最近的操作,Ctrl + r
用于重做被撤销的操作。
移动光标
- 基本移动:
h
(左移)、j
(下移)、k
(上移)、l
(右移)。 - 快速移动:
0
移动到行首,$
移动到行尾。w
跳到下一个词的开头,b
跳回到上一个词的开头。G
跳到文件的末尾,gg
跳到文件的开头。{
和}
可以在段落之间跳转。
查找与替换
-
查找文本:
- 在正常模式下,使用
/要查找的文本
然后按下Enter
进行查找。按n
查找下一个匹配项,N
查找前一个匹配项。
- 在正常模式下,使用
-
替换文本:
- 在末行模式下,使用
:s/原文本/新文本
来替换当前行的第一个匹配项。如果想替换所有匹配项,可以使用:s/原文本/新文本/g
。要在全文中进行替换,使用:%s/原文本/新文本/g
。
- 在末行模式下,使用
使用窗口和标签页
-
分屏:
:split
或:sp
来水平分割窗口。:vsplit
或:vsp
来垂直分割窗口。
-
在窗口间切换:
- 使用
Ctrl + w
加上方向键在窗口间切换。
- 使用
-
使用标签页:
:tabnew
打开一个新的标签页,:tabnext
和:tabprev
在标签页之间切换。
挑战话题:如何批量化注释和去注释
首先ctrl + v 进入视图模式
然后我们可以批量化用键选中,也可以n+shift+g
然后输入shinft+i进入插入模式
最关键一步,此时输入双斜杠 并按两下esc即可批量注释
去注释同理,ctrl+v 选中两列 按L d即可删除
Vim中的批量化注释
vim配置
vim不是简单的执行可执行程序,也会读取若干配置文件,比如 .vimrc
vim也只是一个执行文件
没有我们就自己创建一个 那么我们就可以将对应配置项写入.vimrc
具体一键配置可以网上搜索,配置好后我们直接使用即可
通过本篇博客,我们一起踏上了探索Vim这款强大文本编辑器的旅程。从Vim的基本概念、基本操作,到如何批量化注释与去注释的高级技巧,我们一步步深入了解了Vim的强大功能。Vim不仅仅是一个文本编辑器,它是一个提高你编程效率、优化你编码工作流程的强大工具。
Vim之所以独特,是因为它提供了一种与众不同的文本编辑哲学。通过学习Vim的多种模式和快捷键,我们可以实现快速编辑、高效编码的目标。尽管Vim有着陡峭的学习曲线,但一旦你熟练掌握了它的基本及高级操作,你会发现自己能够更快、更高效地完成工作。
记住,熟练使用Vim需要时间和实践。不要因为一开始的挑战而放弃。随着你不断的练习和探索,你会逐渐发现Vim提供的便捷和强大功能。让Vim成为你编程旅程中的忠实伙伴吧!
希望这篇博客能够激发你深入学习Vim的热情
相关文章:

Vim工具使用全攻略:从入门到精通
引言 在软件开发的世界里,Vim不仅仅是一个文本编辑器,它是一个让你的编程效率倍增的神器。然而,对于新手来说,Vim的学习曲线似乎有些陡峭。本文将手把手教你如何从Vim的新手逐渐变为高手,深入理解Vim的操作模式&#…...
Chapter 8 - 7. Congestion Management in TCP Storage Networks
TCP Flow Monitoring versus I/O Flow Monitoring TCP flow monitoring shouldn’t be confused with I/O flow monitoring because of the following reasons: TCP 流量监控不应与 I/O 流量监控混淆,原因如下: 1. TCP belongs to the transport layer (layer 4) of the OS…...
带你快速入门js高级-基础
1.作用域 全局 scriptxx.js 局部 函数作用域{} 块作用域 const let 2.闭包 函数外有权访问函数内的变量, 闭包可以延长变量生命周期 function 函数名 () {return function () {// 这里的变量不会立刻释放} }3.垃圾回收 不在使用(引用的变量), 防止占用内存,需要…...

数据结构与算法-链表(力扣附链接)
之前我们对C语言进行了一定的学习,有了一些基础之后,我们就可以学习一些比较基础的数据结构算法题了。这部分的知识对于我们编程的深入学习非常有用,对于一些基本的算法,我们学习之后,就可以参加一些编程比赛了&#x…...

多线程JUC:等待唤醒机制(生产者消费者模式)
👨🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:多线程&JUC:解决线程安全问题——synchronized同步代码块、Lock锁 📚订阅专栏:多线程&am…...

无人机动力系统高倍率锂聚合物电池介绍,无人机锂电池使用与保养,无人机飞行控制动力源详解
无人机电池使用及保养 电池是无人机飞行的动力来源,也是一个消耗品,对电池充分了解,采取正确的使用方法,妥善进行维护保养将有助于提高飞行的安全性、延长电池的使用寿命。以下将详细对电池的使用和管理进行讲解。 高倍率锂聚合物电池的含义…...

[BeginCTF]真龙之力
安装程序 双击安装 出现了安装失败的标签,开发者不允许测试。 查看Mainfest入口文件 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/android" android:versionCo…...

手写分布式存储系统v0.3版本
引言 承接 手写分布式存储系统v0.2版本 ,今天开始新的迭代开发。主要实现 服务发现功能 一、什么是服务发现 由于咱们的服务是分布式的,那从服务管理的角度来看肯定是要有一个机制来知道具体都有哪些实例可以提供服务。举个例子就是,张三家…...
除夕快乐!
打印的简单实现,祝大家新的一年万事顺意! 龙年大吉! #include <stdio.h> #include <windows.h> #include <string.h>int main() {const char* message "除夕快乐!";int i;for (i 0; i < strlen(message);…...

17:定时器编程实战
1、实验目的 (1)使用定时器来完成LED闪烁 (2)原来实现闪烁时中间的延迟是用delay函数实现的,在delay的过程中CPU要一直耗在这里不能去做别的事情。这是之前的缺点 (3)本节用定时器来定一个时间(譬如0.3s),在这个定时器定时时间内…...

Fink CDC数据同步(五)Kafka数据同步Hive
6、Kafka同步到Hive 6.1 建映射表 通过flink sql client 建Kafka topic的映射表 CREATE TABLE kafka_user_topic(id int,name string,birth string,gender string ) WITH (connector kafka,topic flink-cdc-user,properties.bootstrap.servers 192.168.0.4:6668…...

ubuntu原始套接字多线程负载均衡
原始套接字多线程负载均衡是一种在网络编程中常见的技术,特别是在高性能网络应用或网络安全工具中。这种技术允许应用程序在多个线程之间有效地分配和处理网络流量,提高系统的并发性能。以下是关于原始套接字多线程负载均衡技术的一些介绍: …...

leetcode (算法)66.加一(python版)
需求 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。 你可以假设除了整数 0 之外,这个整数不会以零开头。 示例 1: 输入:digi…...
DataX源码分析 TaskGroupContainer
系列文章目录 一、DataX详解和架构介绍 二、DataX源码分析 JobContainer 三、DataX源码分析 TaskGroupContainer 四、DataX源码分析 TaskExecutor 五、DataX源码分析 reader 六、DataX源码分析 writer 七、DataX源码分析 Channel 文章目录 系列文章目录TaskGroupContainer初始…...
2024年华为OD机试真题-螺旋数字矩阵-Java-OD统一考试(C卷)
题目描述: 疫情期间,小明隔离在家,百无聊赖,在纸上写数字玩。他发明了一种写法: 给出数字个数n和行数m(0 < n ≤ 999,0 < m ≤ 999),从左上角的1开始,按照顺时针螺旋向内写方式,依次写出2,3...n,最终形成一个m行矩阵。 小明对这个矩阵有些要求: 1.每行数字的…...

红队打靶练习:PHOTOGRAPHER: 1
目录 信息收集 1、arp 2、nmap 3、nikto 目录扫描 1、gobuster 2、dirsearch WEB 信息收集 enum4linux smbclient 8000端口 CMS利用 信息收集 文件上传漏洞利用 提权 信息收集 get user.txt get flag 信息收集 1、arp ┌──(root㉿ru)-[~/kali] └─# a…...

【Linux】网络诊断 traceroute命令详解
目录 一、traceroute概述 1.1 traceroute命令简介 1.2 命令格式 1.3 原理 1.4 命令功能 二、使用实例 实例1:traceroute 用法简单、最常用的用法 实例2:跳数设置 实例3:设置探测数据包数量 实例4:显示IP地址,…...

c#cad 创建-圆(二)
运行环境 vs2022 c# cad2016 调试成功 一、代码说明 这段代码是一个AutoCAD插件,用于在模型空间中创建一个圆形。 首先,我们需要定义一个命令类CreateCircleCommand,并在命名空间CreateCircleInCad中声明。 在CreateCircleCommand类中&a…...
面试高频知识点:2线程 2.1.5如何自定义实现一个线程池
在Java中,线程池是一种用于管理线程的机制,它可以有效地管理多个线程并且可以重复使用它们,从而减少了线程创建和销毁的开销,提高了线程的利用率。本文将介绍如何自定义实现一个简单的线程池,并提供相应的Java代码示例…...

【stm32】hal库学习笔记-ADC模数转换(超详细)
【stm32】hal库学习笔记-ADC模数转换(超详细) 本篇章介绍了ADC实现电压检测的三种方式 ADC原理及选型 ADC将连续的模拟电压信号转换为二进制的数字信号 选型参数 速度(采样频率) 功耗 精度 转换原理 ADC hal库驱动函数 普通…...
R语言AI模型部署方案:精准离线运行详解
R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命
在华东塑料包装行业面临限塑令深度调整的背景下,江苏艾立泰以一场跨国资源接力的创新实践,重新定义了绿色供应链的边界。 跨国回收网络:废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点,将海外废弃包装箱通过标准…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...
Qt Quick Controls模块功能及架构
Qt Quick Controls是Qt Quick的一个附加模块,提供了一套用于构建完整用户界面的UI控件。在Qt 6.0中,这个模块经历了重大重构和改进。 一、主要功能和特点 1. 架构重构 完全重写了底层架构,与Qt Quick更紧密集成 移除了对Qt Widgets的依赖&…...