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,一经查实,立即删除!

相关文章

如何用百度MIP快速搭建体验友好的移动页面

在读这篇文章之前&#xff0c;请确定你已经了解 MIP 定义及加速原理。如果不确定的话&#xff0c;可以到 MIP 官网了解。 改造前期准备和注意事项: 你可以选择直接将原先的移动站点直接改成 MIP 站&#xff0c;也可以单独再做一套 MIP 站点与移动站并存。 复杂的页面暂不建议…

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

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

百度MIP移动页面加速——不只是CDN

MIP 是用 CDN 做加速的么&#xff1f;准确答案是&#xff1a;是&#xff0c;但不只是。 MIP 全称 Mobile Instant Pages&#xff0c;移动网页加速器&#xff0c;是百度提出的页面加速解决方案。MIP 从前端渲染和页面网络传输两方面进行优化&#xff0c;杜绝页面渲染中的阻塞问…

JAVA知识基础(二):基本语法

本篇主要介绍JAVA的运算符、循环结构以及条件结构。 1、JAVA运算符 计算机的最基本用途之一就是执行数学运算&#xff0c;作为一门计算机语言的Java也提供了一套丰富的运算符来操纵变量。 JAVA运算符可以大致概括为几类&#xff1a;算术运算符、关系运算符、位运算符、逻辑运…

JAVA知识基础(三):修饰符

JAVA中根据修饰对象的不同可以分为类修饰符、方法修饰符、变量修饰符三类&#xff0c;其中每种修饰符又可以单独分成两类&#xff1a;访问修饰符和非访问修饰符。为了便于理解&#xff0c;本文以访问和非访问的角度展开。 1、访问修饰符 访问修饰符有四个&#xff1a;public、…

百度推出新技术 MIP,网页加载更快,广告呢?

MIP 项目在 2016 年年初正式发布&#xff0c;帮助移动页面加速&#xff08;原理&#xff09;。内测数据表明&#xff0c;MIP 页面在 1s 内加载完成。现在已经有十多家网站加入 MIP 项目&#xff0c;有更多的网站正在加入中。在MIP收到的反馈中&#xff0c;大部分都提到了广告的…

JAVA知识基础(四):深入理解static关键字

1、static存在的主要意义 static的主要意义是在于创建独立于具体对象的域变量或者方法。以致于即使没有创建对象&#xff0c;也能使用属性和调用方法&#xff01; static关键字还有一个比较关键的作用就是 用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方…

MIP改造常见问题二十问

在MIP推出后&#xff0c;我们收到了很多站长的疑问和顾虑。我们将所有疑问和顾虑归纳为以下二十个问题&#xff0c;希望对大家理解 MIP 有帮助。 1、MIP 化后对其他搜索引擎抓取收录以及 SEO 的影响如何&#xff1f; 答&#xff1a;在原页面 MIP 化&#xff0c;不会影响其它搜…

Nginx(零):背景

我们今天开始对Nginx的学习&#xff0c;本来是打算第一篇就是基础知识介绍的&#xff0c;但是我感觉在学习一个新知识之前总应该知道&#xff0c;我们为什么要学习它&#xff0c;学习它的意义何在吧&#xff01;所以我加了背景这一篇作为Nginx开始学习的标志。 1、Nginx的诞生…

Nginx(一):概念基础

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

MIP 官方发布 v1稳定版本

近期&#xff0c;MIP 官方发布了 MIP 系列文件的全新 v1 版本&#xff0c;建议开发者尽快完成升级。 一、 我是开发者&#xff0c;如何升级版本&#xff1f; 对于 MIP 页面开发者来说&#xff0c;* 只需替换线上引用的 MIP 文件为 v1 版本 *&#xff0c;就可以完成升级。所有…

百度MIP页规范详解 —— canonical标签

百度 MIP 的规范要求必须添加强制性标签 canonical&#xff0c;不然 MIP 校验工具 会报错&#xff1a; 强制性标签 <link rel"/^(canonical)$/"> 缺失或错误 这个标签怎么写&#xff1f;又是干什么用的呢&#xff1f; ** 简单来说&#xff0c;canonical 标签…

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

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

JAVA知识基础(五):深入理解final关键字

1.final 关键字 final关键字主要用在三个地方&#xff1a;变量、方法、类。 final修饰变量&#xff1a;final修饰一个类时&#xff0c;表明这个类不能被继承。final修饰方法&#xff1a;final修饰方法&#xff0c;方法不可以重写&#xff0c;但是可以被子类访问 【前提&#…

CMS模板应用调研问卷

截止目前&#xff0c;已经有数十家网站与我们合作&#xff0c;进行了MIP化改造&#xff0c;在搜索结果页也能看到“闪电标”的出现。除了改造方面的问题&#xff0c;MIP项目组被问到最多的就是&#xff1a;我用了wordpress&#xff0c;我用了织梦cms&#xff0c;怎么改MIP呢&am…

Nginx(三):反向代理

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

VIP站长大会(北京站)常见问题解答

功能支持问题 1. react 能否和 MIP 结合使用&#xff0c;如果暂时不能以后是否有考虑&#xff1f;是否会和其他 JavaScript 框架 (比如 Angular ) 结合 ? 目前暂无计划支持。 2. MIP 页是否支持自定义 cookie? 实现 登录、统计、广告等功能 ? <mip-cookie>组件正在…

Nginx(四):负载均衡Load balancing

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

JAVA知识基础(六):抽象

1.概述 抽象类、抽象方法以及接口&#xff0c;这三个知识点是每个程序员必备的基础&#xff0c;无论是在实际编程的时候&#xff0c;还是在面试的时候&#xff0c;都会出现这类问题&#xff0c;面试官很可能就会问你&#xff0c;interface和abstract的区别 当父类知道子类应该…

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

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