前些日子看了个简书,Spacemacs简介,虽然目的是讲spacemacs,但文章里对emacs,vim以及其他编辑器的情况总结得非常好,可以自行瞧一瞧。
这张图是经典编辑器的学习曲线。notepad就是windows自带的记事本,在windows环境下有人制作了Notepad++,也是很好用且新手友好的编辑器。Pico和Nano很多人都不一定听说过,这俩算是Linux自带的编辑器,跟gedit类似但运行在终端环境(反正弱鸡编辑器我是没用过)。Visual Studio也可以代表后来的vscode,vi则是vim的前身,vim本身继承了vi的优秀传统,而且比vi要好用得多。
虽然图有点老,上面没有atom,没有sublime text这样更现代化且同样好用而经典的编辑器,但是已经可以说明vim和emacs的学习和使用情况了:vim门槛高得吓人,但功能强大;emacs入门比vim稍容易些,但需要记忆非常多的快捷键,而随着emacs的使用,你会发现emacs的“本质”其实是伪装成编辑器的操作系统(所以学习曲线诡异得很)。
总结:如果你不是资深程序员,比如只用r或者matlab这种不正经(笑)的编程语言的,请点击页面标签上的“x"
有句老话说得好:“据说世界上的程序员分三种,一种用vim,一种用emacs,剩下的是其他程序员”。在使用linux的过程中我深切得体会到了这个事实:编写linux,至少是最近版本的linux以及gnu绝大部分软件的人,都不是“其他程序员”。
例如,在使用bash的时候,搜索历史命令使用的快捷键Ctrl-r
,用过emacs的同学是不是有点眼熟?向前搜索嘛。查看man
文档,以及安装很多软件时阅读协议的时候,使用enter
下翻或者jk
上下翻,按q
退出文档或跳过协议,使用过vim的同学熟悉不?(尽管事实上这些命令在vi诞生之前就在ex编辑器–行编辑器中了,vi实际上沿用了很多ex的设定,vim最早则起源于对vi的复刻,你可以在百度百科的角落里找到ex)
说了这些,总结起来就是:vim和emacs都是神器,作为有追求的coder,就算不精通也要了解一些基本知识
以下简单介绍Vim和Emacs,由于我本人不是很熟悉Emacs,Emacs的相关介绍不很详细,多是在其他Vim和Emacs比较的文章中摘录出来的。
Vim是编辑器之神,因为Vim专注做编辑器,Vim的所有功能的核心思想在于:
所谓轻量,就是占用资源小,最直观的表现就是:快!我启动个Visual Studio要花一分钟,启动vim只需一刹那(就是我反应不过来有多快)。Vim也是可能会变慢的,但这只会发生在你加载了大量插件的情况下,即便如此,Vim也比IDE要快得多。
所谓手腕不动,就是说所有vim能做的事情都可以在键盘字母区
附近完成。没错,Vimer们(包括我)连上下左右都懒得抬手去找。虽然有时候鼠标很方便,Vim也不是不支持鼠标操作,但在Vim里的绝大部分时候你可以把鼠标扔掉。为了在如此小的区域内完成如此大量的快捷操作,Vim专门设置了“快捷键模式”(Normal Mode
,Vim有多个模式),进入Vim的默认模式就是这个模式,你的所有击键都被认为是在使用快捷键而不是输入文本,这也是众多完全不看文档和攻略就进了Vim的新手需要面对的第一个问题:为什么不能输入。
可扩展就很好理解了,原生的Vim可能符合作者的需求,但不可能完全符合我本人需求。优秀的编辑器都是可扩展的,而Vim在这一方面显得尤为优秀(除了Emacs的Elisp)。Vim扩展设置已经是一门完全独立的语言Vimscript了,其能实现比较丰富的功能。如果你对Vimscript不满意,你也可以选择用其他语言,如Pythnon对Vim进行扩展,当然,有些设置你还是得使用Vimscript。
Vim的这些特性让它经久不衰,永远有追求最简操作的程序员跑去为Vim设计更符合他们自身使用的插件,而这些插件也可以被其他人下载和使用,社区内有很多成熟的配置,也有公共插件项目来满足一大批人的需求。Vim把编辑器能做的事情做绝了,是编辑器之神。
Vim的设计哲学和Emacs是完全不同的,这是二者引起党争最重要的原因。我们谈过了Vim,这里简单说说Emacs。
Emacs最大的特点是:可扩展性强无敌。你可以用Emacs做任何事,无论是编程,运行代码,任务管理,收发邮件,目录管理,玩游戏,浏览网页,聊天(facebook,qq,微信暂时没有但有被开发出来的可能),甚至煮咖啡(煮咖啡来源于某次愚人节,某程序员用Emacs写了个脚本来控制咖啡机)。Emacs不是单纯的编辑器,它是神的编辑器,使用Emacs的你完全可以一整天只打开一个Emacs,享受神的感觉。
当然,作为Vimer,这里我要开始黑Emacs了。
Emacs的全称可以有很多种,其中一个是:Emacs Makes A Computer Slow。虽然现在计算机的算力比Emacs诞生的年代强了无数倍,Emacs早就不是那么慢了,但Emacs依然比Vim慢。
Emacs = Esc + Meta + Alt + Ctrl + Shift。Emacs的用户认为Vim的操作方式非常古怪,但作为文本编辑器,它需要拥有Vim的不少功能以实现高效编辑,这些功能依赖一些复杂的组合快捷键实现。在这个简称里你可以看到Emacs占用了你能想到的所有组合键按键,尤其是Esc,简直是在谋杀我们的小拇指(笑),emacs导致手指骨折,需要脚踏板 !
The best editor is neither Emacs nor Vim, it’s Emacs and Vim!(最好的编辑器不是Emacs或Vim,而是Emacs+Vim),这就是Spacemacs项目成立的初衷。由于Emacs我本人不很熟悉,这里只说一点:如果你对Vim或者Emacs不熟悉的话是无法正常使用同时具备二者特性的Spacemacs的。将来我会对Emacs和Spacemacs也进行深入学习,但这几个月让我先忙忙各种deadline。
有人觉得Spacemacs的思路非常好,因此制作了SpaceVim的配置。SpaceVim本身是非常好的,有清晰的文档、IDE化的功能并具备Vim本身的优点,开箱即用,更完美的是它有中文文档。
但是在入坑之前,请先思考它到底适不适合你:
SpaceVim官方声称SpaceVim适合:
其核心思想在于:
而无论是界面还是按键,熟练的Vimer会自行配置,在新的编程环境中,你也只需要Vim和你自己的配置文件就可以完成所有配置。因此总结起来,SpaceVim并不是给深度使用Vim的用户的,而是给初级Vim用户或者喜欢开箱即用的用户使用的。
vim是一个很老的软件了,里面的一些实现从现代的角度来看已经不先进了,因此有人重写了vim并命名为neovim。
neovim的出现逼着vim进行了有史以来最复杂的一次更新,也就是vim8,现在的neovim和vim8在使用上其实区别不是很大。具体来说,neovim更激进,bug也会相对多一点,而且完全拥抱了github,使插件开发变得方便了很多;vim更保守一点,gui界面比neovim的更丝滑一些(这俩我都用过,现在是在用neovim,我自认为更新的东西总会比老的更有活力)
当然,这里不做任何推荐,因为vim8本身也是很棒的。具体区别可以参考这个知乎问答:
如何对比评价vim-8和neovim