以设计者的角度入门vim

761 阅读5分钟

本文已参与掘金创作者训练营第三期「高产更文」赛道,详情查看:掘力计划|创作者训练营第三期正在进行,「写」出个人影响力

前言

vim这款文本编辑器很强大,但由于它的模式多样、指令繁多,容易让初学者感到入门,畏惧不前。而由于本人近期学习安排中也需要用到vim(避无可避的程度),无奈之下只能试着硬上了,在这个过程中无意想通了正确的学习姿势,以下是个人的思考笔记。

本文大纲

image-20210519200921571

理清问题

通过的思考,我发现vim之所以难学,有这么几个原因:

  1. 模式多。
  2. 各模式的命令不少。
  3. 网上搜到的教程几乎都是指令的堆砌,对初学者不太友好。

基于以上原因,在没有一个清晰的学习思路指引下,很容易会陷入死记命令的泥潭中。而走出这个泥潭的的常见办法是——用大量实践堆砌熟练度,说白的就是熟能生巧。

而我是个很懒的人。。。我想偷懒,以最少的练习量、最少的时间,尽可能的提高使用vim的使用效率。于是乎,我问了自己这么个问题:

  • vim是什么?vim是一个文本编辑器啊。

是啊,vim是一个文本编辑器啊!那作为一个程序猿,为什么不从自己设计一个文本编辑器的去看待vim辣么多的内容呢?

如何设计文本编辑器

这里讨论的如何设计文本编辑器,为从宏观上分析,文本编辑器需要实现怎样的具体功能的角度出发。

GUI与命令行

让我们从刚接触计算机时,用的最简陋的文本编辑器——记事本 开始分析:

image-20210519203037698

作为一个普通的小白用户,关注的点只有两个:

  • 怎么编写文本?
  • 写好的文本,怎么保存?
  • 怎么退出?

我们都知道,这几个需求的实现在图形界面上,可以由上图方框框出来的三部分组成:

  • 红色方框的编辑区
  • 蓝色方框的功能区中“文件”项下的保存键
  • 绿色方框的窗口控制键

但记事本所处的环境是GUI图形界面,vim是在纯命令行界面作用的文本编辑器。它没有能清晰可视化的功能分区,只有一个近似与上图红色方框编辑区的黑框框。

我们需要用也只能用这个黑框框去实现上述我们提到的所有功能。

那么一个 可切换的双模式 结构想法就很自然而然的应运而生了。

核心功能

双模式切换

模式切换

我们可以设定刚进入编辑器时为 命令模式。这个模式只有三个功能:

  • 进入编辑模式
  • 保存文档
  • 退出文档

编辑模式下只有两个功能:

  • 文本编辑
  • 退回命令模式

这样编辑器最核心的功能——编辑文档,就实现了。

常见需求

在实现了上述核心功能之后,我们就该来聊聊用户体验问题了。一个东西能用跟一个好用是两回事不是嘛。

除了核心的编辑功能外,我们最常用的功能大概有以下几个:

  • 复制粘贴
  • 关键字检索
  • 关键字替换
  • 。。。。

很显然,这些功能可以全丢到命令模式,编辑模式下就跟图形界面一样,乖乖的负责文本编写就好了。

当然,还有个很重要的需求——减少双手离开主键盘区的频率,提高文本编辑速度!!!

完成这个需求也很简单,能让我们离开主键盘区,移到键盘其他区域的无非就辣么几件事:

  • Home/End键
  • PageUp/PageDown键
  • 最重要的方向键

把以上功能全丢到命令模式就好了。有了这些认识,学起vim来就很轻松啦~

vim入门

ok,基于以上整理的思路,下面随便在网上找一份vim教程学习,我选的是菜鸟的教程。

vim模式图

首先是上面这图。我一看,不对劲,为啥两个模式能搞定的东西,vim得搞出3个模式出来?命令模式好理解,底线命令模式是啥玩意儿?瞅瞅资料先......

吼,本菜鸡查完资料回来了~

首先是输入模式和命令模式,这两哥们跟我们前面讨论的差不多,至于底线命令模式是干嘛用的,你们瞅瞅下面这图:

image-20210519220940400

从上面的信息可以得出结论,底线命令模式这大哥的功能是:

  • 文档具体储存、退出方式的处理
  • vim环境的变更

而普通命令模式主要是文本处理的相关指令的集合。

ok,大轮廓搞定了,我们看看具体细节。

核心功能

模式切换

还是用图说话。

vim模式图

从前面可以知道,从简单使用角度,我们关注的重点更多的是在命令模式输入模式

输入模式退回命令模式直接ESC即可,这个无需多说。

而命令模式进入输入模式有三种基本方式:i,a,o

示例

image-20210519225922738

  • i:在当前光标前插入(以 '.' 为当前光标所处位置 )

image-20210519230029146

  • a:在当前光标后插入(以 '.' 为当前光标所处位置 )

image-20210519230129163

  • o:新插入一行

image-20210519230313194

进入编辑模式之后就可以愉快写东西了。

然后写好的,想退出的话,从就在命令模式用 ' : '进入底线模式,简单常用的命令有:

  • w:保存
  • q:退出
  • wq:保存退出

吼了,看到这里最基本的操作相信都木有问题了,还想要更多更好的用户体验只需要按照前面提供的思路去查文档即可~