找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 5582|回复: 0

为什么要用 Emacs/Vim,而不是任何其他编辑器

[复制链接]
发表于 2012-1-17 10:59:48 | 显示全部楼层 |阅读模式
标签:  Emacs  Vim
    其实就是一句话:程序式编辑。
    如果你没明白这个我自造的词组的话,那听我慢慢解释。另外我只用过 Vim,但我相信 Emacs 必然也是如此,下文所有的“其他编辑器”都是指“Emacs/Vim之外的所有其他编辑器”
    曾经有一个朋友,属于微软系的,入选过微软中国区 MVP,有一次他问我,Vim 到底是个什么样的东西。我对 Vim 一直是三脚猫的水平(到现在也是),我说,这玩意的学习曲线几乎是垂直的,非常难上手,但是很强大,把常见操作都“宏”化了,比方说 dd 是删除一行,fa 是光标挪到下一个字母 a 的位置,而 dfa 就是删掉从当前光标到下一个字母 a 之间的所有内容。他“哦”了一下。但我自己也没法更好的解释 Vim 到底好在哪里了。
    前些日子,看到一篇文章《程序员?还是小丑?》,里面第一个段子是,打印 10 个 hello,结果小丑写了 10 行 print "hello"。有人在回复里打趣
    或许第一个小丑用的是Vim,我相信任何编程语言的for循环都不会简单过vim的yy10p的。
    或者是 Y10p
    确实,在那些回复里看到的唯一一个更短的是 Python 的 print “hello ” * 10
    但同时我意识到,这是一个 Vim 跟其他编辑器最主要的差别。如果是更复杂的操作,你可以在任何编辑器里录制一个宏,然后重复,但是对于这么一个简单的操作,其他编辑器里很难用同样如此简洁的输入来达到同样的效果。比方说你可以复制当前行然后粘帖10遍,但是,在Vim里,“10”这个数字是作为参数来输入的,而 Y 和 p 组合后就类似于 PHP 里的 str_repeat 函数。
    所谓“程序式编辑”,就是把 Vim 的编辑方式看成是一种语言,把每个操作都看成函数或者关键词,所有操作合在一起看成是一段用来生成程序的程序。这就是 Vim 跟其他编辑器的根本差别。
    这同时也解释了为什么 Vim 难学:作为成生程序的程序,就需要尽可能的简短(如果命名都用 Java 的方式,那必然生成用的程序会比成生后的程序更长,那还不如直接书写最终程序本身了),所以函数都使用一两个字母来命名……这就必然导致了难学难记:这门语言需要你记住几十个函数,每个函数都只用一两个字母命名,而所有操作组合起来就像一段被混淆过的代码,你很难通过读混淆过的代码来学习程序(也就是看别人用 Vim 的方式),所以几乎是唯一的出路就只有硬背函数名,并尝试自己组合运用这些函数。这还不包括 Vim 的配置文件本身也用的是图灵完备的语言。
    我之前最大的问题就是没搞明白这个本质性的差别,所以在 UltraEdit 上耽误了这么多年,2011 快过去了,今年最大的收获就是开始入门 Vim 和 Git,同时也有点悔,如果早两年这样就好了。
    这个世界上有大量的编辑器,常见的、拥有大量用户的也不下十余种,我之前接触的论调都是说 Vim 或者 Emacs 具有无限扩展的能力,其实编辑器发展到今天,差不多该有的功能都有了,别说什么代码高亮文件跟踪自动完成正则替换,就算插件啊宏啊内置脚本语言啊,也都有,差也差不到哪去。而且很多都有独门的绝活,像下图中 Sublime Text 可以显示整篇代码的缩略图,就必须是原生 GUI 才能实现的功能,内置语言再高级也没用。
   
    但唯独这编辑方式,是刻在骨子里的。如果不是见识了 Vim 的极致的高效,我也无法理解不单是纯键盘输入,连方向键都要用字母键代替。对待这个基本问题,要么是像 Vim 用模式来区分,要么像 Emacs 一样用组合键来区分,再无更好的方法。其他功能都只是锦上添花。
    所以这个世界上编辑器只有三种,Emacs、Vim,和其他。或者说,编辑程序的方式有两种,程序式编辑程序,和文本式编辑程序。
您可能还对下面的文章感兴趣:


您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 18:48 , Processed in 0.016255 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表