白交 发自 凹非寺 
量子位 报道 | 公众号 QbitAI

一个1991年正式发布,如今已经快30岁的「高龄」的代码编辑器Vim,为何如此受欢迎?

在2019年「StackOverflow」关于最流行的开发环境的调查,Vim仍然排在并列第四位,大约有25%的Web开发人员正在使用它。       

而在它之前的,全是2000年以后才出现的代码编辑器。

Vim除了「高龄」以外,还有一个点也困扰着大家,那就是「难用」。如果你没用过,你连怎么退出都不会!

而且这个难用的梗经久不衰。

比如「StackOverflow」有一个近八年之久的问题,活跃度仅在2天前,浏览量累计达210万次

「如何退出Vim编辑器?」

这个看上去似乎是再简单不过的问题了,却依然经久不衰,引发网友热切讨论。

这时候,可能就想问,为何这个Vim这么难用,还这么受欢迎?

了解一下它的历史由来,也许就可以窥见一些原因。

半世纪的积累

最近有一位博主Nikola Đuza,就介绍了Vim是如何开始的——「How Did Vim Become So Popular」。

还记得以前「打孔卡」的时代吗?将「打孔卡」放入计算机内部从而实现编程。对于这一方式来说,放置他们的顺序很重要。

想象一下,这是一张4.5mb数据的照片,堆叠在62500个打孔卡中,然后删除它,再次对它排序。

但是随着计算机功能和存储增长,打孔卡渐渐不能满足程序员的需求,这时候出现了QED编辑器(ed的前身),由此便进入到了「行编辑」时代。

ed编辑器

ed编辑器是一款经典的行编辑器,由贝尔实验室开发,1973年正式发布,已经有47年之久,但至今仍然可以使用。

如果你使用的是Linux或Mac OS,打开终端,输入ed,便可以得到一个简单的行编辑器。

而如果你要写入文件,输入 a并按Enter键,就可以开始编写文本,输入.退出附件模式。然后写入文件,可以输入「w myfile.txt」并按Enter键,最后输入q退出。

# ed
a
Hey there!
I'm qbitai.I'm using ed right now.
How cool!
.
w myfile.txt
60
q

而使用Vim的网友,可能就会觉得很熟悉。Vim和ed有很多相似的地方。这篇博主就提到说,如果你会使用Vim,那么ed就会很快上手。

比如,:q

而在ed之后,便是em。它有「the editor for mortals」(凡人的编辑器)的称号。

也就是说,em可以跟ed做一样的事情,但是没有ed那般神秘,更适合大多数人使用。

Vim的前身——Vi

而随后基于em代码,Sun联合创始人,兼首席科学家Bill Joy开发了ex,算得上是扩展版。它在以往的模式上增加了visual模式,它可以在屏幕上打开文件。

三年之后,操作系统中引入了可执行文件Vi,但仍然可以通过在Vi/Vim访问ex命令。

是他奠定了今天Vim编辑器的键位设计,如果觉得快捷键难记,就怪他吧。

当时Bill Joy使用的是下面的键盘:esc键在现在的tab位置,方向键和字母键混用,这也就注定了之后Vim怪异的键位设计。

vi发布是在1979年,那么Vim是如何诞生的呢?

Vim的诞生

这还得从Vi发布之后的「模仿」开始,很多人开始模仿、克隆vi编辑器。当时就有这么一个「Vi Improved」从中脱颖而出。

它是由「Bram Moolenaar」创建,这个人来头可不小,他还是软件开发工具A-A-P、编程语言Zimbu的开发者。在使用Vim的人,可能看到过他的名字。

Bram使用了一个名为STEVIE的Vi克隆版,并注意到它缺少许多vi的命令。他在此基础上增加了一些新的功能,使其与vi兼容,并以 “Vi Improved “的名义发布。

1993年的2.0版本开始使用Vim名字,然后一直这样沿用至今。

这个几乎集成了近半世纪智慧与努力的Vim,将大量的精力都放在了兼容性上。

博主也说,也许Vim一些有用的功能让出名,但是能让Vim一直都屹立不倒的原因是,它几乎兼容了所有你能想到的东西。

这也是很多程序员的爱用Vim主要原因。而除了兼容性强的优点,强大的键位设计,自行设定快捷键等这些都让Vim成为提升工作效率的绝对利器呀!

让人又爱又恨

Vim诞生的时候,鼠标还不是电脑标配,所以Vim尽量为纯键盘操作而优化。

而后来图形化界面、鼠标的普及,让更过代码编辑器脱颖而出,配合鼠标操作学习门槛低,但效率不及Vim老手。

这也是Vim让人又爱又恨的原因吧。

谈到Vim,国内的程序员怎么看?首先是入门难度大:

用Vim写接口还行,不过还是需要学习下Vim的快捷键,不然太痛苦了。

但是用熟了之后,简直能把Vim用的飞起:

熟悉了之后确实操作起来很快,特别不喜欢用上下左右键。

还有Vim重度使用者来现身说法,真正的Vim高手,是不需要鼠标的~

就因为喜欢上这种双手不离键盘就可以操控一切的feel ,Vim可以让我对文本的操作更加精准,高效。

不过,这位网友也提到,对初学者可能不是特别友好,因为Vim有一定的学习成本,只有做到非常熟练才能感受到它带来的快捷。

如何花式退出Vim?

那么回到一开始的问题,怎么退出Vim呢?

不谈正经的方法(:q!),有人曾总结了千百种花式退出方法,请看这里:

【天下苦Vim久矣!硬核程序员教你如何花式退出Vim,一周收获2400星】

吐槽归吐槽,你觉得Vim好用吗?你在写代码的时候又用着哪一款编辑器呢?

参考链接:
https://pragmaticpineapple.com/how-did-vim-become-so-popular/

本文系网易新闻•网易号特色内容激励计划签约账号【量子位】原创内容,未经账号授权,禁止随意转载。

了解AI发展现状,抓住行业发展机遇

每个工作日,量子位AI内参精选全球科技和研究最新动态,汇总新技术、新产品和新应用,梳理当日最热行业趋势和政策,搜索有价值的论文、教程、研究等。

同时,AI内参群为大家提供了交流和分享的平台,更好地满足大家获取AI资讯、学习AI技术的需求。扫码即可订阅:

AI社群 | 与优秀的人交流

量子位 QbitAI · 头条号签约作者

վ'ᴗ' ի 追踪AI技术和产品新动态

喜欢就点「在看」吧 !

为什么老编辑器Vim这么难用,却很受欢迎?相关推荐

  1. 神级编辑器 Vim 使用-插件篇

    在这篇中, 会列举各种实用的插件, 包括他们的安装, 配置及使用方法 注意: 不是本部分的所有插件都是你需要装的, 如果盲目安装插件只会导致你 vim 功能混乱, 速度底下, 所以适时整理真正需要的插 ...

  2. 程序员的编辑器——VIM

    程序员的编辑器--VIM dieken at newsmth dot net 一.VIM的历史 1. ed     ed是UNIX上最古老最基本的编辑器,它最初是UNIX之父Ken Thompson编 ...

  3. 程序员的编辑器——VIM(转)

    程序员的编辑器--VIM dieken at newsmth dot net 一.VIM的历史 1. ed     ed是UNIX上最古老最基本的编辑器,它最初是UNIX之父Ken Thompson编 ...

  4. 神级编辑器 Vim 使用-基础篇

    最近一段时间, 看了两本关于 vim 的书, 重新学了一遍 vim, 在感慨 vim 强大的同时, 也为从前的自满感到汗颜, 我拿起了从前做的关于 vim 的笔记, 重新梳理了一遍, 作为一个系列分享 ...

  5. <Linux> 软件包管理器yum及编辑器vim的使用

    文章目录 一.yum的背景知识 1. 商业生态 2. 开源生态 3. 软件生态本土化 二.yum 的基本使用 1. 查看软件包 2. 安装.卸载.搜索软件 实现Windows下和Linux下文件互传 ...

  6. 程序员的编辑器——VIM【转载】

    转载:http://www.cnblogs.com/evasnowind/archive/2010/11/09/1873028.html 程序员的编辑器--VIM   一.VIM的历史 1976年左右 ...

  7. 程序员的编辑器----VIM

    程序员的编辑器--VIM   来源: ChinaUnix博客 日期: 2007.01.27 11:03 (共有0条评论) 我要评论   程序员的编辑器--VIM   一.VIM的历史 1976年左右B ...

  8. (转载)程序员的编辑器——VIM

    程序员的编辑器--VIM 一.VIM的历史 1976年左右Bill Joy开发了vi,他也是伯克利大学的毕业生,后来他跟其他人一起成立了Sun Microsystems公司并成为了Sun的首席科学家. ...

  9. Linux之编辑器 vim

    Linux之编辑器 vim 1. vim 的介绍 vim 是一款功能强大的文本编辑器,也是早年 Vi 编辑器的加强版,它的最大特色就是使用命令进行编辑,完全脱离了鼠标的操作. 2. vim 的工作模式 ...

最新文章

  1. 什么是条件组合覆盖_物史政组合分析,新高考最终受益者丨选科17期
  2. INVEST原则的应用
  3. 在使用添加按钮给table插入新的一行时遇见的问题总结及处理方法
  4. @Autowired
  5. Android学习(七)—— Android布局
  6. cocos2d 解密ccbi_怎么让cocosbuilder制作的动画(cocos2d-x的ccbi动画)播放完删除自己?...
  7. Gitee搭建自己的图床
  8. 不要再问我this的指向问题了
  9. 在虚拟机环境(CentOS7系统)下将kubernetes中部署服务成功,但在虚拟机外部无法访问到服务...
  10. GDB简单调试linux内核与模块的方法
  11. centos5.5和6.5中vncservervncviewer最基本配置
  12. 【Java面试系列】Linux面试题
  13. Vue3 异步组件 suspense
  14. 记录配置Jupyter kernels
  15. jboot 在拦截器中如何获取 请求的IP地址
  16. Renesas瑞萨电子提供的RcarH3,第一个SOC从第三代R-Car汽车计算平台的自动驾驶领域时代
  17. json转对象(GsonFormatPlus)
  18. Hive任务执行报错:FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  19. 重温数据结构:二叉排序树的查找、插入、删除
  20. php session 超时设置,php如何使用session 超时设置?

热门文章

  1. 使用pip安装特定的软件包版本
  2. 如何找到数字数组的总和
  3. 直接铸造与“ as”运算符?
  4. 如何混淆(保护)JavaScript? [关闭]
  5. 马蜂窝事件背后暴露出的数据风险
  6. 【开篇】自我介绍和博客未来规划
  7. 2016总结 - 我的转型之路
  8. LAMP平台部署及应用
  9. delphi 入门教程
  10. Power Designer反向获取数据库物理模型时Unable to list the users.