技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 其他 --> 为什么要用 Emacs/Vim,而不是任何其他编辑器

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

浏览:12194次  出处信息

    其实就是一句话:程序式编辑。

    如果你没明白这个我自造的词组的话,那听我慢慢解释。另外我只用过 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,和其他。或者说,编辑程序的方式有两种,程序式编辑程序,和文本式编辑程序。

建议继续学习:

  1. vim几个小技巧(批量替换,列编辑)    (阅读:35995)
  2. 简明Vim练级攻略    (阅读:20800)
  3. Vim下的代码自动补全和代码跳转阅读    (阅读:14413)
  4. 在vim(gvim)中运行终端(对,你没有看错,我也没有写反)    (阅读:9363)
  5. Emacs配置C/C++-mode的代码智能提示和自动补全    (阅读:9235)
  6. vim入门,进阶与折腾    (阅读:9254)
  7. 让vim在终端下的配色亮起来!    (阅读:8585)
  8. Emacs安装配置    (阅读:7358)
  9. 最近总结的一些技巧(vim,python,svn,fiddler等)    (阅读:7104)
  10. vim的复制粘贴小结    (阅读:6540)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1