2009-05-04

VIM哲思(二)

模式,模式


有一件众所公认的事实:VIM的学习曲线是众多文本编辑器中最陡峭的!


陡峭的原因在于决定使用VIM之前,不得不了解模式的概念,否则连一个字母也别想输入!
VIM共有六种基本模式(Basic Mode) [1]
  1. 普通模式(Normal Mode)
  2. 插入模式(Insert Mode)
  3. 末行模式(Command-line Mode)
  4. 可视模式(Visual Mode)
  5. 选择模式(Select Mode)
  6. Ex模式(Ex Mode)

这六种模式可以精简为普通模式和插入模式两种,其他的四种模式可以看作普通模式的特例。普通模式操作指令,插入模式操作数据。而操作方式的表象是一致的:输入字符序列,甚至是相同的字符,以得到不同的结果。

这种高度的抽象仿佛Lisp语言的灵魂附体:

  • 指令即数据,数据即指令。
  • 字符和字符组合之于VIM就好像原子和列表之于Lisp。
  • 而指令的互相组合,就好像高阶函数Lambda[2],是一种更高层次的过程抽象。

纸上得来终觉浅,绝知此事要躬行:

把整篇文章全部小写
ggguG

去掉所有的行尾空格
:s/\s\+$//

去掉所有的空白行:
:%s/\(\s*\n\)\+/\r/


a12345678
b12345678
c12345678
d12345678
e12345678
f12345678
g12345678
h12345678
i12345678
1、将上面内容中所有的45换成de
:%s/45/de/g
2、去掉每行开头第一个字母
gg Ctrl+v Gd

是不是瞠目结舌,叹为观止?这些神秘的字符组合蕴藏着不为人知的能量。



统一之美

  • 世界是一切实况之所是。
  • 实况之所是,即事实,是由原子事实组成的。
  • 原子事实是对象(物项、事物)的一种结合。
                           ——维特根斯坦《逻辑哲学论》

字符在VIM里即是原子事实(Sachverhalt),而其本身是"命令模式指令意义"与"插入模式字面意义"的一种结合。字符原子组成了实况之所是(was der Fall ist),进而建立了整个表象的世界图像。

语言就是世界的逻辑形式。
              ——维特根斯坦《逻辑哲学论》


这种近乎偏执的抽象传达了这样一种理想:完美的东西就应该是广泛适用的。不断地结构再重构认知的元素对象,统一各种命题,无疑是对完美的追求。

实际在UNIX系统中,以文件为原子事实的概念就根深蒂固,以至于各种硬件设备都被统一抽象成文件。
在Lisp中,明确提出了原子这个术语,其递归式的元编程(MetaProgramming)思想更是指出了描绘世界的逻辑形式的可能。


名称意谓对象。对象是它的意谓 。
                             ——维特根斯坦《逻辑哲学论》

因此,是简单对象的存在保证了意义的确定性。名称若无指称,则包含此名称的命题无意义。名称代表对象,而非描述对象,因此名称不是对象的图象,名称也无所谓真假。只有命题才是图象。同样的原子字符,不同模式下是不同的,如果混淆了,根据维特根斯坦的图像理论,就是没分清名称、命题、对象的关系。因为“只有命题具有意义,只有在命题的叙述关系中一个名称才有指谓”,而这种叙述关系在VIM里就是模式。这实际上表达了一种更深层次的本体论。

VIM是哲学,也是艺术。

2 条评论:

  1. 高深...我的评价~
    呵呵,我已经把你的blog加进我的链接了>>

    回复删除
  2. 嗯,老大还是勤奋的多,blog更新的那叫一个快。

    blog是孤独者的玩具,twitter是怕孤独者的工具。呵呵。

    回复删除