模态编辑是我们在纯粹偶然中获得的奇怪历史偶然
如果vi不存在,它就不会被发明出来。
模态编辑概述
在非模态编辑器中,按下"u"键会像预期那样在文本中添加一个"u"。而在模态编辑器中,按下"u"会根据你所在的"模式"执行不同的操作。在Vim的默认"普通"模式下,“u"会撤销对文本的最后一次更改,而在"可视"模式下它会将选中的文本全部转换为小写。只有在"插入"模式下才会插入字符。
这种设计最明显的好处是可以在键盘上密集地布置高级命令。标准的美式键盘有大约48个键专门用于插入字符。加上ctrl和shift修饰符,每个其他模式至少可以增加约150个额外快捷键。
模态编辑的非传统起源
在vi之前的编辑器都不是模态的。有些如EDT/KED使用组合命令,而其他如ed或TECO基本上是文本编辑领域特定语言的REPL。
据我所知,第一个模态编辑器是Butler Lampson于1974年开发的Bravo。Bill Joy承认他从中获得了灵感:“屏幕编辑模式的很多想法都是从Bravo手册中窃取的”。Bill Joy可能采用这个想法是因为他在处理响应缓慢的哑终端,这迫使他要尽量减少复杂操作所需的击键次数。
为什么模态编辑没有普及
虽然vi在Bill Joy的同事中很受欢迎,但他并不将其成功归功于其功能:“vi的美妙之处在于我们免费赠送了它。现在每个人都有了它。所以它有机会成为基本UNIX的一部分。”
到90年代,人们开始相信模态编辑是个好主意,即使不是显而易见的好主意。这就是为什么我们看到vi的直接后代,最著名的是vim。这也是为什么像Emacs和VSCode这样的可扩展编辑器都有vim模式扩展,但这些都只是单模态基础上的简单模拟层。
模态编辑的局限性
模态编辑在真空中听起来像是个糟糕的主意。模式是用户必须始终知道的全局状态,这使其变得危险。要很好地使用新模式,你必须记住所有的键绑定,这很困难。在变得比像VSCode这样的单模态组合编辑器更高效之前,模态编辑有着残酷的技能门槛。
这就是为什么它最初出现在非常特殊的情况下,作为鼠标用户体验的早期实验和处理调制解调器延迟的方法。我们今天拥有vim是一个历史偶然。