写代码要用 Vim,因为越难入门的工具回报越大

来源:36氪
发布时间:2018-09-19
用途广泛,功能强大的工具VIim,上手确实难,但用好了能飞天。

编者按:现在的技术界有一种倾向,将软件/应用操作简单化,用户能轻松上手。但是工具是否强大,取决于它能否灵活地满足使用者的各种需要。有些工具虽然很难入门,学会了便能对自己的操作有更深的层次的了解,能赋予创造和表达更大的自由度。本文编译自Quartz的原题为“Forget easy-to-use design. Choose something hard instead”的文章。

Vim是一款文本编辑器,基于上世纪70年代开发的vi。 试过的人都公认说难,就连程序员都觉得光是退出程序都不那么简单。但是Vim的用途很广,不管你用的是Mac还是Windows,软件都是已经自带的。而且,只要掌握了使用方法的人,很可能会逢人就安利不止。

“这简直就是最好用的文本编辑器,跟汉堡店In-n-Out的汉堡一样让人满意。”

我就是Vim“神教”的信徒之一。现在我也要来安利一下。但是,我只是用Vim为例子,我要安利的不单是这款软件,而是各种“难用”的技术工具。

写代码要用 Vim,因为越难入门的工具回报越大

Vim是从vi发展出来的一个文本编辑器, 在代码补全、编译及错误跳转方面,编辑功能特别丰富,很多程序员都使用Vim。Vim和Emacs并列成为类Unix系统用户最喜欢的编辑器。 Vim的第一个版本发布于1991年,最初简称是为Vi IMitation,后来功能不断增加,正式名称改成Vi IMproved。Vim是一款自由软件。

现在技术界有一股潮流,工具好不好,似乎都取决于是否易用。照这样的思维,最好的软件就是无需说明书,无需解释,无需教程,你只需要按1或者0。简单到这种地步,五岁的娃娃也可以很快上手应用自如了。

这样的标准听起来很理想, 但是“简单”不是没有代价的,而且五岁孩子可不聪明,简单易用的工具,可想而知,肯定不是灵活的。如果一款软件将所有操作都简化成一个按钮,那么这个按钮在设计的时候,就需要对用户的操作做出很多假设。如果这些假设不符合你的具体情况的话,只能算你运气不好。

举一个很明显的例子。智能手机和笔记本电脑就有很大的不同。在智能手机的应用里,比如Whatsapp,长按链接就会复制链接。那么,这个操作背后的假设就是——Whatapps的开发者想的是,如果用户长按链接,他们可能是想复制链接。但是事实可不一定如此。或许我长按是想分享链接到其他应用呢?或者我只想复制链接中的一部分内容,还有可能我是想将链接保存到稍后阅读清单里。这些操作在笔记本上都很简单,但是在手机上,有时反而很麻烦。

问题就在于开发者觉得“易用”的设计,他们想象中的用户需求,以及用户真正的需求不总是吻合的。用户长按文本可能是想分享,怎么就复制了呢?Word也是如此,又是它总是自动缩进,改都改不了。如果软件开发者总是习惯于帮用户做决定,根据自己的假设来设计软件或应用的功能,这样的不匹配只会越来越普遍。

这也是复杂工具的优势所在。与其想办法、花时间找最简单易使用的工具,倒不如花点时间掌握最强大的工具,然后精准地实现自己想要的操作。



世界上最难用的文本编辑器

Vim是什么?为什么那么难用?

Vim是一款文本编辑器。编辑文本听起来不是什么难事,所以要说文本编辑器难用,估计很多人会不解。文本嘛,敲敲键盘,字就出现在屏幕上了,这能有多难?

但是Vim的操作没这么简单。你用Vim输入文本的时候,敲了键盘,字母不一定会出现在键盘上。

没错,因为它是一款“模式编辑器”,vim的模式可以有多种编辑状态,最常用的是普通模式,输入模式,视图模式,命令模式,普通状态是vim的默认模式,所有键盘的按键都是你可以使用的快捷键,使用Vim处理文本的时候,键盘不再用于输入字符,而是输入 vim的各种命令。这样,用户非常快速做各种改动。所以Vim常常是用来改代码。

Vim里使用的命令很多都很简单,但是语法很强大,有动词、名词和修饰词。字母d代表“删除(delete)”,w代表“单词(word)”。如果你键入dw,就可以删除一个单词(delete a word)。你可以加上修饰词,比如数字5, 键入d5w就能删除光标后的5个字。如果你操作失误,可以按下u来撤销(undo),然后键入i来进入输入模式(insert),做正常的文本输入。y代表的是“yank”(拉),用于复制,yw就可以复制一个单字。

实际使用起来如下图。

写代码要用 Vim,因为越难入门的工具回报越大

通过这样的语法,用户可以组合出无数种命令,实现具体且非常复杂的操作。在不熟悉的人看来,这些操作可能很炫酷。只要敲几个键,你就能把好几句话从一段移到另一段;从光标处把下一个句号前的内容一下删除,然后重写句子;两个单字换位置;两段合为一段,等等。完全不用碰鼠标就能实现很多此类操作。

学会使用难入门的工具有什么好处?

就我个人来说,学用Vim给我的工作带来了天翻地覆的改变。在我使用比较熟悉的时候,我觉得自己之前输入和编辑文本,就像骑小孩子用的自行车一样,后轮两侧装着小轮子,跑得稳当,但是又慢又笨拙;就像弹钢琴,但是一次只按一个琴键,根本没意识到自己可以弹和弦,可以一次按下好几个键。甚至,我就像柏拉图洞穴隐喻中生活在山洞里的人,只能看到现实的影子,就以为影子是现实本身。

写代码要用 Vim,因为越难入门的工具回报越大

“洞穴隐喻”——设想有这样一个大洞,通过一个长长的通道与外部世界相连,整个通道能够挡住任何阳光进入洞内。一组囚徒背对着出口,面向远处的墙壁。他们的四肢被套上了枷锁,并且他们的头颈也被固定住,无法转动,因此看不到他人,实际上也看不到自己身体的任何部分,而只能够看到面前的墙壁。他们在如此的环境下终其一生,不知道其他任何东西。在洞穴中,他们身后有一把明火。他们不知道自己和明火之间隔着与人一般高的土墙,在墙的另一边,人们头顶东西走来走去,东西的影子被火光投射到囚徒面前的墙壁上,人们的嘈杂声也回响到墙壁那边囚徒们的耳朵里。柏拉图说,这样一来,囚徒们一生中所感觉或经验到的唯一实在就是这些影子和回声。在此情况下,他们自然而然地会以为这些影子和回声成了全部的现实,他们能够谈论的,就是这种“现实”以及对这种“现实”的经验。

这么说似乎消极了点,但是事实确实如此。掌握了Vim之后, 不断是在写代码,还是在用文字表达自己的时候,感觉都更自如,更得心应手。

而Vim并不是什么新事物。几乎计算机普及以来就一直存在了。Vim是最早开发出来的一款文字编辑器。在鼠标普及之前就有了,所以没有鼠标,才更显出它的高效。Vim来自软件开发的早期,当时的编程人员面对有限的计算能力和灵活程度,只能靠使用起来略为复杂的工具来应对。Vim确实很难上手。

放在今天看来,文本编辑这样简单的工作都可以这么复杂,可能难以想象。这是因为,开发Vim的人没想着做简单易用的工具,而是把决定权都交给用户。Vim的开发者考虑的是如何做出最好的工具,功能足够强大,能够解决用户处理任务需要的工具。在Vim的例子中,开发者觉得计算机的文本处理主要是编辑,而不是加入新字符。因此,Vim的默认模式是普通状态是编辑模式,可以剪切、移动、操纵文本。如果用户无法接受敲了d,屏幕上却没有出现的字母d的情况,那开发者就不能做出这样的软件了。只有假设用户愿意接受的情况下,这样的软件才有用户基础。

找到你自己的想法

使用Vim编辑是成年人学习的一项技能。这种技能想要学会并不简单,但是正如学烹饪,学修电器,学会拒绝他人一样,一旦学会,长期看来益处很大。当然,不是所有难学的技能都值得学习,有些程序很难用,很难上手,但是设计得也很糟糕、不实用。在学习Vim的过程中, 我意识到,很多“易用”的工具,用多了只会让自己越来越傻。

现在新兴的易用型软件,有很多会降低我们的工作/学习效率。简单的工具一般会自带假设,中断使用者的思考过程,为了使用的流畅,牺牲的是效率的最优化。而让大家退避三舍的难用工具Vim,熟悉之后却能让我更自如地表达自己,降低了实现自己脑中所想操作和实际操作之间的阻力。我可以快速写出自己脑中文本的几个版本,非常灵活。如果我不喜欢Vim现有的操作,我可以增加其他用户做的特征,或删去自己不喜欢的功能,或者花点时间做出最适合自己的工具包。其实也不是这么难,你可以看看科学作家迪希特(Jay Dixit)的这个演讲,他也没有编程经验,但是他根据自己的工作习惯和节奏,把Vim的对手工具,Emacs定制成最适合自己的版本。

所以,我们可以尝试接受复杂的工具:如果能学R语言或者Python,为何执迷于Excel?如果能用自制的Anki卡片,为什么要买做好的记忆卡片?我们不应该指望软件帮我们把事情通通完成,而是应该充分应用自己的大脑。

编译组出品。编辑:郝鹏程