一篇文章学会Vim
一篇文章学会Vim
声明:以下内容均为我个人的理解,如果发现错误或者疑问可以联系我共同探讨
简介
Vim是一个高度可定制的终端文本编辑器,它可以很方便的创建和修改任何类型的文本。作为vi的升级版,有许多新的特性(以下列出的特性为比较常用的,详细特性可以查看help vi_diff.):
- 无限撤销:可以无限制的撤销
- 可移植性:Vi仅在Unix上可用,Vim还可以在Windows、Macintosh,Amiga,OS / 2,VMS,QNX和其他系统上运行。
- 语法高亮:当用Vim进行编程的时候,他可以根据正在编辑的文件类型,使其以内容以不同的颜色或样式突出显示。Vim捆绑了数百种语法突出显示规则集。
- 图形用户界面:Vim在控制台上运行良好,也可以在许多GUI中本地运行,包括Mac OS和Windows。它还可以操作剪贴板。
- vi兼容模式:紧要关头,您可以强制Vim像vi一样。使Vim与vi不兼容的所有改进和错误修复都已关闭,您将获得100%与vi兼容的编辑器。
Vim作为许多程序员最喜欢的文本编辑器之一,它具有像:多级撤销、代码补全、支持数百种编程语言和文本格式、强大的搜索和替换功能等。
安装与卸载
安装
Windows
先把安装包下载下来,然后根据提示安装。
Unix
在Github上下载源文件安装
Mac
在github下载,根据文件类型安装。
详细安装教程
卸载
Unix or Mac
源代码安装
在控制台输入
make uninstall
软件包管理器安装
根据不同软件包管理器的卸载命令卸载
Windows
找到安装目录下的 “uninstall-gui” 程序进行卸载
教程
vimtutor
Vim自带教程vimtutor是你从零开始学习Vim最好的老师,教程包含了日常所需要的各个命令和功能,还有实操教学。如果你的系统语言是中文,那么打开vimtutor时默认是中文版的教程,中文版教程由梁昌泰 先生进行译制。在命令行中输入vimtutor
,就可以打开该教程,学习完该教程大约需要30分钟左右。
有一款游戏Vim Adventure,可以作为学习Vim的一种放松。
Vimtutor章节小结
第一讲
-
光标在屏幕文本中的移动既可以用箭头键,也可以使用 hjkl 字母键。
h (左移) j (下行) k (上行) l (右移)
-
欲进入 Vim 编辑器(从命令行提示符),请输入:vim 文件名 <回车>
-
欲退出 Vim 编辑器,请输入 :q! <回车> 放弃所有改动。或者输入 :wq <回车> 保存改动。
-
在正常模式下删除光标所在位置的字符,请按: x
-
欲插入或添加文本,请输入:
i 输入欲插入文本 在光标前插入文本
A 输入欲添加文本 在一行后添加文本
特别提示:按下 键会带您回到正常模式或者撤消一个不想输入或部分完整的命令。
第二讲
-
欲从当前光标删除至下一个单词,请输入:dw
-
欲从当前光标删除至当前行末尾,请输入:d$
-
欲删除整行,请输入:dd
-
欲重复一个动作,请在它前面加上一个数字:2w
-
在正常模式下修改命令的格式是:
operator [number] motion
其中:
operator - 操作符,代表要做的事情,比如 d 代表删除
[number] - 可以附加的数字,代表动作重复的次数
motion - 动作,代表在所操作的文本上的移动,例如 w 代表单词(word),$ 代表行末等等。
-
欲移动光标到行首,请按数字0键:0
-
欲撤消以前的操作,请输入:u (小写的u),欲撤消在一行中所做的改动,请输入:U (大写的U),欲撤消以前的撤消命令,恢复以前的操作结果,请输入:CTRL-R
第三讲
-
要重新置入已经删除的文本内容,请按小写字母 p 键。该操作可以将已删除的文本内容置于光标之后。如果最后一次删除的是一个整行,那么该行将置于当前光标所在行的下一行。
-
要替换光标所在位置的字符,请输入小写的 r 和要替换掉原位置字符的新字符即可。
-
更改类命令允许您改变从当前光标所在位置直到动作指示的位置中间的文本。比如输入 ce 可以替换当前光标到单词的末尾的内容;输入 c$ 可以替换当前光标到行末的内容。
-
更改类命令的格式是:
c [number] motion
第四讲
-
CTRL-G 用于显示当前光标所在位置和文件状态信息。 G 用于将光标跳转至文件最后一行。先敲入一个行号然后输入大写 G 则是将光标移动至该行号代表的行。gg 用于将光标跳转至文件第一行。
-
输入 / 然后紧随一个字符串是在当前所编辑的文档中正向查找该字符串。输入 ? 然后紧随一个字符串则是在当前所编辑的文档中反向查找该字符串。完成一次查找之后按 n 键是重复上一次的命令,可在同一方向上查找下一个匹配字符串所在;或者按大写 N 向相反方向查找下一匹配字符串所在。CTRL-O 带您跳转回较旧的位置,CTRL-I 则带您到较新的位置。
-
如果光标当前位置是括号(、)、[、]、{、},按 % 会将光标移动到配对的括号上。
-
在一行内替换头一个字符串 old 为新的字符串 new,请输入 😒/old/new
在一行内替换所有的字符串 old 为新的字符串 new,请输入 😒/old/new/g
在两行内替换所有的字符串 old 为新的字符串 new,请输入 :#,#s/old/new/g
在文件内替换所有的字符串 old 为新的字符串 new,请输入 :%s/old/new/g
进行全文替换时询问用户确认每个替换需添加 c 标志 :%s/old/new/gc
第五讲
-
:!command 用于执行一个外部命令 command。
请看一些实际例子:
(MS-DOS) (Unix):!dir :!ls # 用于显示当前目录的内容。:!del FILENAME :!rm FILENAME # 用于删除名为 FILENAME 的文件。
-
:w FILENAME 可将当前 VIM 中正在编辑的文件保存到名为 FILENAME 的文件中。
-
v motion :w FILENAME 可将当前编辑文件中可视模式下选中的内容保存到文件FILENAME 中。
-
:r FILENAME 可提取磁盘文件 FILENAME 并将其插入到当前文件的光标位置后面。
-
:r !dir 可以读取 dir 命令的输出并将其放置到当前文件的光标位置后面。
第六讲
-
输入小写的 o 可以在光标下方打开新的一行并进入插入模式。输入大写的 O 可以在光标上方打开新的一行。
-
输入小写的 a 可以在光标所在位置之后插入文本。输入大写的 A 可以在光标所在行的行末之后插入文本。
-
e 命令可以使光标移动到单词末尾。
-
操作符 y 复制文本,p 粘贴先前复制的文本。
-
输入大写的 R 将进入替换模式,直至按 键回到正常模式。
-
输入 :set xxx 可以设置 xxx 选项。一些有用的选项如下:
‘ic’ ‘ignorecase’ 查找时忽略字母大小写
‘is’ ‘incsearch’ 查找短语时显示部分匹配
‘hls’ ‘hlsearch’ 高亮显示所有的匹配短语
选项名可以用完整版本,也可以用缩略版本。
-
在选项前加上 no 可以关闭选项: :set noic
第七讲
-
输入 :help 或者按 键或 键可以打开帮助窗口。
-
输入 :help cmd 可以找到关于 cmd 命令的帮助。
-
输入 CTRL-W CTRL-W 可以使您在窗口之间跳转。
-
输入 :q 以关闭帮助窗口
-
您可以创建一个 vimrc 启动脚本文件用来保存您偏好的设置。
-
当输入 : 命令时,按 CTRL-D 可以查看可能的补全结果。
按 可以使用一个补全。
帮助
在控制台中输入vim就可以查看Vim的相关信息
根据图片所示我们可以知道,当前VIM的版本为8.0.1365,想退出需要输入":q",查看在线帮助文档可以输入":help",查看版本信息可以输入":help version8"
在英文模式下输入":help"回车后便可以看到
在这里有详细的Vim教程,教你玩转Vim。
相关文章:

一篇文章学会Vim
一篇文章学会Vim 声明:以下内容均为我个人的理解,如果发现错误或者疑问可以联系我共同探讨 简介 Vim是一个高度可定制的终端文本编辑器,它可以很方便的创建和修改任何类型的文本。作为vi的升级版,有许多新的特性(以下列出的特性…...
面试算法91:粉刷房子
题目 一排n幢房子要粉刷成红色、绿色和蓝色,不同房子被粉刷成不同颜色的成本不同。用一个n3的数组表示n幢房子分别用3种颜色粉刷的成本。要求任意相邻的两幢房子的颜色都不一样,请计算粉刷这n幢房子的最少成本。例如,粉刷3幢房子的成本分别为…...

js逆向第11例:猿人学第4题雪碧图、样式干扰
任务4:采集这5页的全部数字,计算加和并提交结果 打开控制台查看请求地址https://match.yuanrenxue.cn/api/match/4,返回的是一段html网页代码 复制出来格式化后,查看具体内容如下: <td><img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABUAAA…...

OpenEular23.09(欧拉)操作系统为企业搭建独立的K8S集群环境,详细流程+截图
一.环境; win10,vmware16 pro,openeular23.09,linux内核 6.4.0-10.1.0.20.oe2309.x86_64, docker-engine 2:18.09.0-328,kubernetes 1.25.3,containerd 1.6.22,calico v3.25 集群…...
学生成绩管理系统半成品
C语言的老师在给我们讲指针的时候,讲的并不深入,她用了一个学生成绩管理系统来引入指针这个东西并给我们讲解,但我觉得她的管理系统功能有一些不足,并且不是很美观,所以说心血来潮,自己也动手写了一个学生成…...
国家信息安全水平等级考试NISP二级题目卷⑤(包含答案)
国家信息安全水平等级考试NISP二级题目卷(五) 国家信息安全水平等级考试NISP二级题目卷(五)需要报考咨询可以私信博主! 前言: 国家信息安全水平考试(NISP)二级,被称为校园版”CISP”,由中国信息…...

4.快速实现增删改查,模糊查询功能
打开springboot项目,在com.example下建包common,在common下新建Result.java 4.1封装统一的返回数据结构 1.在Result.java中编写如下代码: private static final String *SUCCESS*"0"; private static final String *ERROR*"-1"; p…...

【Redux】自己动手实现redux和react-redux
1. React提供context的作用 在class组件的世界里,如果后代组件共享某些状态,比如主题色、语言键,则需要将这些状态提升到根组件,以props的方式从根组件向后代组件一层一层传递,这样则需要在每层写props.someData&#…...

代码随想录算法训练营day6|242.有效的字母异位词、349.两个数组的交集、202.快乐数
哈希表理论基础 建议:大家要了解哈希表的内部实现原理,哈希函数,哈希碰撞,以及常见哈希表的区别,数组,set 和map。 什么时候想到用哈希法,当我们遇到了要快速判断一个元素是否出现集合里的时…...

2024.1.4每日一题
LeetCode每日一题 2397.被列覆盖的最多行数 2397. 被列覆盖的最多行数 - 力扣(LeetCode) 题目描述 给你一个下标从 0 开始、大小为 m x n 的二进制矩阵 matrix ;另给你一个整数 numSelect,表示你必须从 matrix 中选择的 不同 …...
C++协程和线程的区别?详细介绍一下C++协程
C协程和线程的区别 线程是操作系统级别的资源,由操作系统负责调度和切换,每个线程都有自己的堆栈和执行上下文。线程之间的切换需要保存和恢复线程的执行上下文,这个过程有一定的开销。协程是用户态的轻量级线程,协程的调度完全由…...

数字信号处理期末复习——计算大题(一)
个人名片: 🦁作者简介:一名喜欢分享和记录学习的在校大学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:V…...

matlab数值计算函数--ode45
当难以求得微分方程的解析解时,可以求其数值解,Matlab中求微分方程数值解的函数有七个:ode45,ode23,ode113,ode15s,ode23s,ode23t,ode23tb。本文讲解ode45,其…...

Vue3地图选点组件
Vue3地图选点组件 <template><div style"width: 100%; height: 500px"><div class"search-container"><el-autocompletev-model"suggestionKeyWord"class"search-container__input"clearable:fetch-suggestion…...
JS之注册事件兼容性解决方案
本章介绍注册事件兼容性的解决方案 废话不多说,直接上代码: function addEventListener(element, eventName, fn) {//判断当前浏览器是否支持 addEventListener 方法if (element.addEventListener) {element.addEventListener(eventName, fn); // 第三个…...

C#中使用as关键字将对象转换为指定类型
目录 一、定义 二、示例 三、生成 使用as关键字可以将对象转换为指定类型,与is关键字不同,is关键字用于检查对象是否与给定类型兼容,如果兼容则返回true,如果不兼容则返回false。而as关键字会直接进行类型转换,如果…...

【Spring实战】21 Spring Data REST 常用功能详细介绍
文章目录 1. 资源导出(Resource Exporting)2. 查询方法(Query Methods)3. 分页和排序(Pagination and Sorting)4. 关联关系(Associations)5. 事件(Events)6. …...

05-微服务-RabbitMQ-概述
RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式: 同步通讯:就像打电话,需要实时响应。 异步通讯:就像发邮件,不需要马上回复。 两种方式各有优劣,打电话可以立即得到响应&am…...

jmeter参数化的三种方式
1.用户定义变量 使用变量: ${变量名} 这个变量是全局变量,也就是在下面子节点中都可以使用; 使用场景:两个账号分别有不同的权限,A经办,B审核。等。。。 2.CSV数据文件设置 3.函数...
java基础之Java8新特性-Lambda
目录 什么是Lambda表达式 Lambda表达式规范 基本语法 参数列表 函数体 注意事项 如何定义函数接口 1.保证接口中只能有一个抽象方法 2.使用FunctionalInterface注解标记该接口为函数接口 使用Lambda调用无参函数 使用Lambda调用有参函数 使用Lambda的精简写法 使用…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...