[HCI] 淺談模式”mode”與文字編輯的技術與學習 | vgod’s blog

来源:百度文库 编辑:神马文学网 时间:2024/05/04 14:05:33

vgod’s blog

Mac | Apple | 资讯 | 科技 | 程式设计 | 人机互动 | 波士顿 | 留学生活
« [HCI] 费兹定律Fitts’ Law与使用者介面设计给程式设计师的Vim入门图解说明 »

[HCI] 浅谈模式”mode”与文字编辑的技术与学习

December 7th, 2009 by vgod | 浏览:41370人次
分享 推到Twitter 推到Plurk

很久以前就想过要写一篇关于文字编辑(text editing)的文章,当然我要讲的不是要怎么写文章,而是关于使用文字编辑器(text editor)的技术。

文字编辑可以说是电脑歷史上最古老也最被广泛使用的功能之一,无论是古老的mainframe或是现代的PC、Mac,甚至是手机,上面一定都有文字编辑的功能。人们每天都在用文字编辑器,不管是写blog、打报告、写程式,即使只是用twitter或plurk写一句话,也都是在做文字编辑。既然这件事每个人每天都在用,还有什么好谈的呢?有趣的地方就在于,虽然大家每天都在用文字编辑器,但很少人会仔细去想要如何才能把这件事做得更快更好。怎样的编辑器才是一个好用的编辑器?怎样的编辑器用起来才能让人感到行云流水、人机合一的美妙境界?

我们先从一般最常见的编辑器说起。一个常见的编辑器就像Windows的记事本一样,或是浏览器内预设的文字输入区(textarea),支援游标移动/选取、新增/删除/修改文字、复制/剪下/贴上、搜寻/取代等基本功能。这种常见的编辑器用起来很简单,只要在键盘上打字就能新增文字,按下backspace或delete键就能删除文字;用滑鼠点击任何文章内的地方游标就会移动过去;复制、搜寻等功能可以透过menu bar找到,或是利用一些约定俗成的快速键(Ctrl-C, Ctrl-V..)就可以在编辑文章中快速唿叫这些功能。这种编辑器的特色是学习门槛很低,要记忆的只有一些特殊的快速键,即使不记得也能透过menu bar或是context menu找到。

如果用之前说过的usability来分析这种编辑器,大概可以知道这样子的UI具有容易学习(高learnability)、不容易忘记(高memorability)、不容易产生Errors、一般用起来也不会有太大不满(satisfaction)。一切看起来都很美好,唯一的问题是,这种编辑器的efficiency到底是好还是不好?

回答这个问题前,先继续看另一种编辑器的设计,我们才能比较不同设计的好坏。

在1976年UNIX刚诞生不久时,出现了一个特殊的编辑器叫做vi。vi引入了一个很特殊的概念:模式(mode)。

vi和一般常见编辑器最大的不同在于它有两种模式,命令模式(command mode)和插入模式(insert mode)。在命令模式下任何键盘输入都会被解读成送给编辑器的特殊指令,例如移动游标、复制/贴上、搜寻..等等全都是送给编辑器的命令。而在插入模式下,键盘输入的字会被送入编辑中的文件内,这模式也就是一般编辑器预设的模式。

在HCI的研究中,模式(mode) 是一个很常被探讨的概念。在不同的模式下,使用者即使给了相同的输入,但系统却会产生不同结果。日常生活中最常见的例子就是汽车的排档:在D档时踩油门车子会前进,但在R档时踩油门车子却会后退。而有多种模式的UI会带来最大的问题是mode error,也就是使用者分不清或是忘记现在系统所在的模式,而得到了非预期的结果。这种error问题可大可小,最严重可能就是开车时忘记在R档而踩了油门想往前进却撞上后面的车。也有些比较轻微的,像是在打字时忘记caps lock是开着的而不小心打出一连串的大写文字就比较无所谓,因为看到后马上就能回头修正。

但如果是在看不到的时候意外开着caps lock打字呢?(像是打密码的时候)还好最近几年出现下面这种设计,在密码输入框上面显示caps lock的状态,用来避免打密码时不小心开了caps lock造成的mode error。

vi引入mode到编辑器中,最大的问题就是产生了mode error的可能。也就是说,使用者如果以为他在insert mode而快乐的开始打字,但结果却是什么事都没发生(除非他刚好按到a或i进入了insert mode..)。这问题也是造成vi难以入门的原因:你可以想像有许多第一次进到vi的人,打半天字却什么都没有跑出来会带来多大的挫折感。而且mode error可怕的地方在于,不是只有新手会碰上这种error,即使是vi的专家也常常会在insert mode打指令或是在command mode中打文章。(如果你在文章中看到:wq这种怪东西,就知道那人是用vi的了)

说起来mode带来不少坏处,但它也不是没有好处。让我们反观一般编辑器的”mode”设计。常见编辑器其实不是没有mode,而是他们的mode是「暂时」的(这叫spring-loaded mode),靠Ctrl、Shift、Alt、Cmd、Win这些功能键来「暂时」进入命令模式。例如说Ctrl-C可以复制文字,这其实就是靠Ctrl赋予”C”这个键暂时的特殊功能,而取消原本在文件里插入”C”的预设功能。用spring-loaded mode的好处是不容易产生mode error,因为使用者平常就只处在一种mode中,只有当使用者想要用特殊功能时,才必须先刻意按住某些特殊功能键来启动它。spring-loaded mode的坏处在于,Ctrl、Alt、Shift这些键的位置在键盘的边缘,再加上还必须按住不放(有时候还要两三个键一起按住),使用者常常就得用别扭姿势让小指和无名指按住,造成精神与肉体上的折磨。在按住这些功能键的同时,快速键的位置还不能距离太远才能用单手按到,所以我们才会看到最常用的快速键都集中键盘左下角(Z undo、A全选、X剪下、C复制、V贴上、F搜寻…)。

后来文字编辑器变得越来越复杂,快速键也大量增加,这时在有限的空间内分配快速键的位置并且让使用者容易学习又不容易忘记就成了一件困难的事。现代的一般编辑器,包括很多写程式用的IDE,大量使用各种混合Ctrl、Shift、Alt的快速键,这种快速键设计哲学是把每一个功能对应到一组复合键上。理所当然的,功能越多,快速键就越多越难记。

因为多了mode,vi和一般编辑器的命令设计哲学也非常不同。vi的哲学是把功能分解成最小单元,再把这些最小单元一一对应到不同按键上,最后再利用一连串的按键组合产生使用者想要的复杂功能。以移动游标来说,vi把这件事分得非常仔细,从字元(character)、单字(word)、行(line)、句子(sentence)、段落(paragraph)、萤幕(screen)、区块(block)、到档案(file)都有对应的键可以以不同的单位大小来移动游标,例如按w可以跳到下一个单字(word),}可以跳到下一个paragraph…等等。乍看之下似乎很复杂,连移动游标看起来都这么麻烦,但这样设计的好处在后面。文字编辑还有很多动作可以做,像是删除、剪下、复制..等等。vi把动作和操作的单位分解开来,例如:删除(delete)是d、复制(yank)是y,这样我们就只需要分别记忆动作对应的键和单位对应的键,就可以交叉组合出多种一般编辑器做不到的复杂功能。例如说,dw就是删除(delete)一个单字(word)的意思,y}可以复制(yank)一个段落(paragraph)。如果你想要的话,单位前面还可以加上量词,例如说d2w是删除2个单字。

vi的这种设计避免了快速键的组合爆炸(想想看如果把各种组合都对应到一个ctrl-alt快速键会有多少个..),并且让使用者能完全使用键盘来精确、快速的编辑一个文件,一旦熟悉这种操作后,手都不用离开键盘,不管是写程式或是写文章都有了一种人机合一的流畅感,心中想到哪里游标就能精确移动到哪里,不管多复杂的文字操作都能快速解决,心中的爽快感其实是难以用笔墨形容的。一般编辑器依赖于滑鼠作为移动和选取的主要工具,其实不管在learnability、memorability、errors都优于vi的键盘设计,但最大缺点就是efficiency很低。原因之一是,要用滑鼠一只手就得离开键盘,光是这个时间用键盘操作的人都已经做完了(用laptop的touch pad就是另一回事了);原因之二是,滑鼠移动是不精确的,要把游标对准某一点所花的时间远比按下键盘上固定位置的按键来得长(请参阅之前关于Fitt’s Law的文章);原因之三是,即使是用键盘控制游标,也没办法针对不同单位大小做控制,所以常常会看到一般使用者按住方向键等游标慢慢移动到某个地方..。(註:一般文字编辑器有个小技巧,这里顺便告诉大家:Windows上按Ctrl+左/右可以以一个word为单位移动,Mac上是Alt+左/右。几乎所有可以打字的地方都能用。)

身为一个靠打字(不管是写程式或是写论文)吃饭的人,文字编辑可以说是我在电脑上花最多时间的工作之一。我很幸运在国中就接触到Linux,所以也就接触到了vim(vi后来的延伸版,是目前最流行的vi版本),没想到这一用就用了十年…。vim也是我从国中开始用的每一台电脑里都必装的软体,即使学了数十种程式语言,从Windows、Linux换到Mac,我到现在都还是用vim写程式、写论文、写报告..。甚至在command line (bash)下面,都可以设定成vi mode,接着就能用vi的快速键来编辑指令。写程式如果没有vim,我等于被打断一条腿一样(不夸张,每次被迫在IDE里写程式我都有种武功被废了的感觉…)。虽然一开始学vi/vim的门槛较高,但我很高兴一开始花了点时间去学它,后来就再也不用学新的editor或IDE,只靠这一招半式就能行遍天下,实在非常值得呀。