也谈 VIM/EMACS

来源:互联网 发布:淘宝招牌制作 编辑:程序博客网 时间:2024/05/17 06:07

Vim VS Emacs 的论战似乎从来就没有停息过。他们分别以 vimer和emacser自称。偏执地坚持只用这两种编辑器的人虽然彼此不服对方,但有一点却是这两者共同的特征,那就是只以自己为尊。


然而我写此文的目的并不是支持或是反对某一方。我两种编辑器都用过好几年,也没有特别的偏好。我想就自己的经验谈谈新手是否需要学习 vim或是emacs。就我自己的经验来说:

1) vim/emacs都是可以脚本化编程的编辑器。从可编程性上来看,emacs内置的elisp语言(lisp的一个变种)是较为完整的编程语言,比vim的来得强大得多。然而我个人对lisp这种古老的语言不是很喜欢。它太烦琐艰涩,而且非常小众,因此我极少愿意去修改elisp写的东西。Vim的脚本语言本来就只是为了配置vim而设计的,因此更简洁直接,容易编写,缺点就是语言的完整性远不如lisp这样的正宗编程语言。


2) Vim/Emacs都是通用的编辑器,自身是不带任何针对某个专业领域的支持的。然而通过插件来扩展,我们几乎可以得到无限的功能。我不得不强调的是,“通过扩展”往往看上去很美好,实际上并不好用。因为一些复杂的功能,如智能感知,需要大量的专业的编程工作,如解析语法树,根据上下文来推断变量类型,智能的修改建议等。这些复杂的高级的功能需要成千上万的代码,远不是几行简单的lisp或是vim脚本就能搞定的事情。这些专业的需要,如果需要用户去自己配置的话,编写配置文件的功能量几乎等同于重写一个IDE了。虽然目前vim/emacs的爱好者们集中力量一起开发了不少有用的插件,但这些插件的功能和专业的IDE比起来,我只能说是不敢恭维。比如java开发的eclipse,我就没有在emacs中找到能和其相提并论的“配置”插件。因此,如果专业领域内有强大的IDE的话,我推荐使用这些专业的IDE,它们往往比vim/emasc在专业领域内要强上几条街。


3) 在编程时,我个人比较注重智能感知和代码重构,这两个功能能大大提高编程效率,而且是目前IDE里普遍做得不够好的地方。vim和emacs都有相应的插件或多或少地实现这些功能,可惜都不如专业的IDE来得强大。比如复杂的代码经常无法识别出来(STL和带有模板的C++代码常有此问题),补全的速度非常非常慢,智能性不够(比如不能从上下文进行推断然后把最有可能的选项放在最前面)等等。debug方面也是很重要的。vim/emacs在debug上做得非常差,完全没有专业的IDE来得便捷。我认为debug时直观和方便是非常重要的,那种操作烦琐,界面抽像的debuger,到底是你在debug程序,还是程序在debug你呢?  就我自己来说,我觉得C++的debuger目前还缺点gui方面的更强大一点的功能,比如像DDD那样能plot出一个数组的。我个人因为经常要debug一些数值算法的程序,所以能不能直观地观察到某个变量的变化曲线很重要,但只有matlab这样的环境才提供debug时plot的功能。


4) 我自己目前用emacs还是挺多的,基本不用VIM。我用emacs是因为我需要写latex,而emacs下有个叫auctex的插件用来写latex是所有可用的工具中最方便强大的。搞不懂为啥没人开发强大的开源latex编辑器。


5) 那么,精通 VIM/Emacs 是通往高手的必经之路么?

我想这个问题很复杂,很难回答。难点在于,你怎么定义“高手”。如果你认为“高手”就是打字飞快,能用最少的按键实现文本的编辑,哦,那精通vim/emacs确实是必经之路了;如果你要成为在纯字符界面下也能自如地编程的人(比如要远程到一个没有GUI的server上修改代码的),那vim应该是非常好的选择;如果你要成为一个不管啥语言啥任务都只用一种编辑器的人,那么vim/emacs是你的必经之路; 当然还有很多没有列举的情况下,你也需要学习使用vim/emacs。因此我建议在你决定是否需要学习vim/emacs之前,先想想你要成为什么样的“高手”,要用vim/emacs做什么,你能从中得到什么好处。不要人云亦云,觉得那些大牛们用vim/emacs,你也跟着去学。就我个人来看,除了写latex之外,我是不需要使用vim/emacs的。java/C++的编程我使用eclipse和netbeans,matlab自带的编辑器就很好用了。如果要我把精力浪费在深入vim/emacs的使用上,我宁可把这些宝贵的时间花在研究算法和理论研究上。


6) 我精通vim/emacs,就能成为高手么?

同样的,先定义“高手”是什么。如果你说的是使用vim/emasc的高手,那么恭喜你,你精通之后就是这方面的高手了。如果你说的是编程方面的高手,那么对不起,我想光是精通这个对你没啥帮助,算法和相关方面的理论知识应该是更重要的;如果你想成为其它方面的高手,那我就只能祝君好运了。一句话,虽然 XXX之父用的是 vim/emacs,但就算你用了vim/emacs,也不见得就能成为XXX之父。成为XXX之父,用不用vim/emasc是无关紧要的,他的专业知识上的水平才是最重要的。



原创粉丝点击