Vim从理解到应用

1991 年,来自荷兰的一名工程师 Bram Moolenaar 为了在他的Amiga计算机上复制Vi的功能,正式发布 了Vim的第一个版本。在当时无论谁也没想到,这款软件未来能在技术圈爆发出那么大的威力,为千千万万的工程师节省了无数时间,大幅提升他们的开发效率。

从Vi衍生出来的Vim有着不同于大多数编辑器的使用方式:通过键盘对多种模式的相互切换,进行各项命令的执行和对文本的编写。这种方式使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作。对文字录入员或者程序员可以大大增强速度和效率。

接下来我们将开始对Vim的学习。

1、Vim模式介绍

Vim具有6种基本模式和5种派生模式,我们将只简单介绍下6种基本模式:

  • 普通模式(Normal mode)(常用)
    在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。

  • 插入模式(Insert mode)(常用)
    在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。
    在插入模式中,可以按ESC键回到普通模式。

  • 可视模式(Visual mode)
    这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。

  • 选择模式(Select mode)
    这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

  • 命令行模式(Command line mode)(常用)
    在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。

  • Ex模式(Ex mode) 这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。

六种基本模式中以普通、插入和命令行三种模式最为常用,因为这三种模式的相互配合即可完成基本的编辑功能(普通模式:对文本进行复制、粘贴、删除、撤销等操作;插入模式:编写文本内容;命令行模式:保存、退出文档,以及设置编辑环境)。

vim启动进入普通模式后,可通过按i键(插入)或a键(附加)进入插入模式,通过:键进入命令行模式。而当Vim处于插入模式或者命令行模式,均可以用过按Esc键或者Ctrl+[回到普通模式。
在这里插入图片描述

2、Vim的进出与游标移动

2.1、Vim的打开

使用vim命令进入vim界面,命令格式如下

vim 文件名

默认条件下为当前路径下的相应文件,如果文件不存在将新建文本后打开Vim。

2.2、游标移动与跳转

在普通模式下,使用方向键或者反人类的h、j、k、l键可以移动游标,并通过w、b、e等键进行游标的跳转,具体内容参见下表:

按键说明
nG(n Shift+g)游标移动到第n行(行间跳转)
gg游标移动到第一行(行间跳转)
G(Shift+g)游标移动到最后一行(行间跳转)
b到前一个单词的开头
w到下一个单词的开头
e到当前单词的结尾
ge到前一个单词的结尾
0或^到行头
$到行尾
f<字母>向后搜索<字母>并跳转到第一个匹配的位置(很实用)
F<字母>向前搜索<字母>并跳转到第一个匹配的位置(实用)
t<字母>向后搜索<字母>并跳转到第一个匹配的位置之前的一个字母(不常用)
T<字母>向前搜索<字母>并跳转到第一个匹配的位置之后的一个字母(不常用)

注:在命令行模式下,可通过输入:set nu以显示行号

2.3、Vim的退出与保存

2.3.1命令行模式下的退出
在命令行模式下,常用输入wq回车,保存并退出编辑,下表为具体的退出方式:

命令说明
:q退出
:wq保存并退出
:q!强制退出
:wq!强制保存并退出
:x保存并退出
:w<文件路径>另存为
:saves 文件路径另存为

2.3.3普通模式下的退出
普通模式下用户可以使用Shift+zz进行保存并退出操作!

3、Vim的增删改查、复制粘贴撤销与快速缩进

不知道为什么,一提到增删改查我就很激动。

3.1、增删改查

3.1.1、增加(插入)操作
Vim很直接的拥有一个插入模式进行插入操作,下表为在普通模式下进入插入模式的具体方式(不包括通过替换方式进入插入模式的方法):

按键说明
i在当前光标处进行编辑
I在行首插入
a在光标后插入编辑
A在行末插入
o在当前行后插入一个新行
O在当前行前插入一个新行

3.1.2、删除操作
进入普通模式,使用下列命令可以进行文本快速删除:

命令说明
x删除游标所在的字符
X删除游标所在前一个字符
Delete删除游标所在的字符(同x)
dd删除整行
dw删除一个单词(不适用中文)
d$或D删除至行尾
d^删除至行首
dG删除到文档结尾处
d1G删至文档首部

3.1.3、修改(替换)操作
替换是针对普通模式下的操作,具体操作间下表:

命令说明
r+<待替换字母>将游标所在字母替换为指定字母
R连续替换,直到按下Esc
cc替换整行,即删除游标所在行(将进入插入模式)
cw替换一个单词,即删除一个单词(将进入插入模式)
C替换游标以后至行末
~反转游标所在字母大小写

3.1.4、查找操作
普通模式下输入 / 然后键入需要查找的字符串 按回车后就会进行查找。 ? 与/ 功能相同,只不过 ? 是向上而 / 是向下查找。 进入查找之后,输入n 和 N 可以继续查找。 n是查找下一个内容,N查找上一个内容。
此外,普通模式下可以使用*(或g*)和#(或#)来向下和向上寻找游标所在处的单词。

3.2、复制、粘贴、撤销与快速缩进

3.2.1、复制粘贴与剪切粘贴
普通模式中使用y复制:

命令说明
yy复制游标所在的整行(5yy表示复制5行)
y^复制至行首,或y0。不含光标所在处字符
y$复制至行尾。含光标所在处字符
yw复制一个单词
y2w复制两个单词
yG复制至文本末
y1G复制至文本开头

普通模式下的使用p进行粘贴:

  • p(小写)代表粘贴至光标后(下)
  • P(大写)代表粘贴至光标前(上)

此外上文提到的dd删除操作也是剪切,删除后可以使用p进行粘贴的。

3.2.2、撤销(Undo)操作

  • Vim使用u或者u{n}进行撤销一次或者n次的操作;
  • 使用U(大写) 撤销当前行的所有修改;
  • 此外,Vim使用Ctrl+r进行Redo(复原)操作,进行对undo操作的插销。

3.3.3、快速缩进与文本调整
以下是常用的缩进和文本调整方式:

命令说明
<<整行向左回退
>>整行将向右缩进(非常好用)
:set shiftwidth?命令行模式下,获取缩进设定值
:set shiftwidth?=n命令行模式下,设定缩进值为n
:ce(center)使本行内容居中
:ri(right)使本行文本靠右
:le(left)使本行内容靠左

4、Vim的高级功能

高级功能剩下的内容有时间再更新吧。。。

5、总结

VIM 如果不是经常使用,很容易忘记它的使用技巧,需要经常复盘,久而久之也就养成了手指记忆。

为了更好的解决这个问题,让各大开发者可以快速掌握 Vim 的常用快捷键,一位开发者做了一款游戏:Vim Adventures。在这个游戏中,你需要配合各种常用的 Vim 快捷键,来移动光标,与 NPC 进行对话,寻找线索,获取钥匙,打开宝箱。当你一次次通关后,便会慢慢发现自己已成功掌握大量 Vim 使用技巧。
PS:这个游戏只有前三关是免费的!!!

如果文章有表述不当的地方可以留言指正,互相学习 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JAVA知识基础(一):数据类型

在我们学习一门编程语言时&#xff0c;最先要了解的就是数据类型&#xff0c;而数据类型又都是抽象的概念&#xff0c;初学者理解起来比较困难&#xff0c;所以我们往往是先应用再理解&#xff0c;但是在本篇文章我决定用先理解再应用的方式尝试一下&#xff0c;试试效果。 1、…

Nginx(一):概念基础

上一篇我们介绍了Nginx的背景&#xff0c;现在我们就要开始正式对Nginx的学习了。本篇我们将对Nginx的基本定义进行介绍&#xff0c;了解Nginx到底是什么。然后我们会介绍Nginx最基本的三个概念&#xff1a;反向代理、负载均衡、动静分离。 1、Nginx是什么 Nginx(“engine x”…

Nginx(二):安装、配置、常用命令

1、Nginx在Linux操作系统中的安装 这里简单介绍一下nginx的安装了 1.1、前期准备 在安装nginx之前我们要提前准摆好它的编译工具以及库文件&#xff1a;zlib、poenssl。 还有有让Nginx支持Rewrite功能的PCRE. 安装的途径有很多可以参考&#xff1a;https://www.runoob.com/lin…

Nginx(三):反向代理

我们本篇将通过两个实例进行对Nginx反向代理的学习。 1、概念基础 反向代理&#xff0c;其实客户端对代理是无感知的&#xff0c;因为客户端不需要任何配置就是可以访问。我们只需要将请求发送到反向代理服务器上&#xff0c;有反向代理服务器去选择目标服务器获取数据后&…

Nginx(四):负载均衡Load balancing

1、概念基础 Load balancing&#xff0c;即负载均衡&#xff0c;是一种计算机技术&#xff0c;用来在多个计算机&#xff08;计算机集群&#xff09;、网络连接、CPU、磁盘驱动器或其他资源中分配负载&#xff0c;以达到最优化资源使用、最大化吞吐率、最小化响应时间、同时避…

MIP开发教程(三) 使用MIP-CLI工具调试组件

一 . 在 mip-extensions 仓库中创建新的组件二 . 预览调试组件 三 . 在 MIP 页中引用自己编写的 MIP 组件 四 . 组件提交到 GitHub 仓库时需要进行校验 站长开发的非通用组件&#xff0c;使用 组件上线平台 提交&#xff0c;上线后代码位于 GitHub/mip-extension-platform 仓…

MIP开发教程(二) 使用MIP-CLI工具调试MIP网页

初始化 MIP 配置 新建一个 MIP 网页 编写 MIP 网页代码 校验 MIP 网页 调试 MIP 网页 1. 初始化 MIP 配置 首先在html目录下进行初始化 MIP 配置&#xff1a; $ mip init 此时会创建mip.config文件&#xff1a; 2. 新建一个 MIP 网页 在mip-project/html文件夹下输入如下…

Nginx(五):动静分离

1、概念基础 Nginx动静分离简单来说就是把动态请求和静态请求分开&#xff0c;不能理解成只是单纯的把动态页面静态页面的物理分离。严格意义上说应该是动态请求跟静态请求的分开&#xff0c;可以理解成使用Nginx处理静态页面&#xff0c;Tomcat处理动态页面。动静分离从目前实…

Nginx(六):配置nginx高可用集群

我们知道在我们使用nginx代理多态tomcat服务器时&#xff0c;如果某台tomcat服务器发生宕机&#xff0c;那么nginx的分配机制可以自动将其剔除。但是如果发生了nginx的宕机状况&#xff0c;又该如何解决呢。 1、配置高可用的集群 1.1、什么是高可用 高可用HA&#xff08;Hig…

MIP开发教程(一) MIP-CLI工具安装与环境部署

依赖安装 安装 MIP-CLI 创建开发文件结构 1. 依赖安装 MIP-CLI 使用 NPM 安装&#xff0c;依赖 node 环境&#xff1a; node 安装-windowsnode 安装-mac MIP-CLI 开发组件需要 git&#xff1a; git 安装-windowsgit 安装-mac 2. 安装 MIP-CLI MIP-CLI&#xff1a;mip 开…

向MIP开源项目提交Issues

Issues 是 GitHub 管理需求&#xff0c;讨论技术方案的方式&#xff0c;附&#xff1a;官方解释。MIP 是在 GitHub 上的开源项目&#xff0c;也使用 Issues 来做任务管理。 一、Issues 在 MIP 项目中的应用 MIP 项目中的 Issues 主要有两种用法&#xff1a; 1. * 记录 bug,…

Nginx(七):nginx原理解析

前面我们讲到了nginx的反向代理、负载均衡、动静分离以及高可用&#xff0c;本篇我们来了解一下nginx的原理&#xff0c;看一下nginx是怎么执行的。 1、mater和worker 2、worker是如何进行工作的 3、相关问题 3.1、一个 master 和多个 woker 有好处 &#xff08;1&#xff0…

MIP技术交流分享(3月9日)

3月9日上周四下午&#xff0c;MIP 团队工程师与去哪儿酒店云、众荟的 Web 前端工程师进行了一次面对面的技术交流。 在这次交流中&#xff0c;MIP 工程师主要分享了 MIP 技术原理&#xff0c;MIP 加速原理&#xff0c;以及 MIP 为开发者提供的工具集。去哪儿的工程师也提出了通…

SpringBoot基础篇(一):Spring Boot入门

我们今天开始对SpringBoot的学习&#xff0c;本篇主要是Spring Boot的入门部分。 1、SpringBoot简介 引用SpringBoot在百度百科中的含义&#xff1a; Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使…

SpringBoot番外篇(一):使用Spring Initializer快速创建Spring Boot项目(IDEA版)

IDE都支持使用Spring的项目创建向导快速创建一个Spring Boot项目&#xff1b; 选择我们需要的模块&#xff1b;向导会联网创建Spring Boot项目&#xff1b; ps:需要联网 1、创建新项目时选择Spring Initializ&#xff0c;选择好java版本&#xff0c;点击next。r 2、填写项…

开发教程(四) MIP组件平台使用说明

组件审核平台用于上传 MIP 组件。经过自动校验之后&#xff0c;提交审核&#xff0c;通过审核的组件会定时推送到线上&#xff0c;供网站使用。 平台地址&#xff1a;https://www.mipengine.org/platform/ 1. 使用说明 MIP 组件审核平台用于提交开发完成的组件&#xff0c;如…

MIP 技术交流分享(3月15日)

3月15日下午&#xff0c;MIP 团队工程师与58赶集的 Web 前端工程师进行了一次面对面的技术交流。 在这次交流中&#xff0c;MIP 工程师主要分享了 MIP 技术原理&#xff0c;MIP 加速原理&#xff0c;以及 MIP 为开发者提供的工具集。 58赶集的工程师提出了以下问题&#xff1a…

Redis(零):背景

什么是NoSQL&#xff0c;什么是Redis&#xff0c;我们在了解这个系列之前&#xff0c;先来看一下Redis是从何而来&#xff1f;Why redis is needed? 1、单机MySQL年代 在最早的单机MySQL年代&#xff0c;存在着访问量小&#xff0c;单个数据库等特点。 但是特有着众多的缺…

Redis(二):Redis入门与性能测试

1、Redis概述 Redis是什么&#xff1a; Redis&#xff08;Remote Dictionary Server )&#xff0c;即远程字典服务&#xff0c;是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库&#xff0c;并提供多种语言的API。 免费开源&#xf…

Redis(三):Redis基础知识与常用命令

1、基础命令 Redis默认有16个数据库&#xff0c;用的是第0个数据库&#xff0c;可以使用select进行切换数据库&#xff0c;使用DBSIZE查看DB大小&#xff08;只针对当前数据库&#xff09;。 使用keys * 查看当前数据库下所有的key&#xff0c;使用flushdb清除当前数据库&am…