个人认为 VIM 中各种指令的可组合性,是 VIM 保持经久不衰的最深层次的源泉,是实现各种高效操作的基石。
使用过 VIM 的人都知道,可以使用简短的 VIM 快捷键完成一些相对复杂的操作。以个人经常使用的快捷键 ciw
为例,ciw
并不是一个完整独立的命令,而是由 c、i、w 这 3 个命令组合起来,其中 c 为 Change 即修改,i 为 Inner 即内部,w 为 Word 即单词,整个命令组合并直译过来,即为“修改内部的单词”,实际上的效果是修改当前光标选中的单词。正是因为这些原子命令的可组合性,允许这些命令可以有机地结合,实现 1+1 > 2 的效果。一旦这种可组合性的特性让使用者产生印象,便会给人一种这样的隐喻:「组合中的指令是可以替换的」,使用者可能会通过自己的想法,在可组合的规则内自由的尝试其他的组合。例如将 ciw
中的 c 替换为 d,diw
这个指令即代表删除当前光标所在的单词,如果替换为 y,yiw
即代表复制当前光标所在的单词。VIM 在这样用户的自由地实践中,通常会诞生一些连作者都未曾设想的操作,这使得 VIM 在用户的使用「迭代」中迸发出惊人的生产力。
可组合性不仅仅是 VIM 中最强大的理念,同时也是软件领域最为强大的武器。
- 编程语言只提供少量的关键词及对应的约束规则,使用有限的元件「组合」出可运行的程序。
- UNIX 中通过管道(pipe)将功能不同的程序组合成一个整体实现复杂的数据操作。
- 互联网中使用不同的通信协议或者 API 将不同的软件和服务组合起来,实现更加复杂的互动结构。