Vim 如今的适用场合:
时至今日,在琳琅满目的 Editor 和 IDE 之中,Vim 并不起眼。以现如今的眼光来看,它界面原始、不易上手、配置复杂、学习曲线始终居高不下。那么除了用来装逼,Vim 还有什么存在的必要么?我个人觉得还是有的,它的优势主要体现在以下几方面:
-
支持命令行环境。
如果你是服务器管理员,或者经常进行 ssh 远程登录操作,那么在纯命令行环境下,Vim 无论从功能还是便利性(多数平台内置)来讲,都是多数人的不二选择。这也是现如今 Vim 最大的用武之地。 -
功能强大并且容易获得。
之所以这两点放在一起讲,是因为单独拿出来说,都不足以成为使用 Vim 的理由。首先功能强大这点毋庸置疑,这也是一众死忠能拿出来吹嘘的资本,关键还有它无处不在的特点加以配合,使得它成为高手必会的武器之一。既然是高手,免不了四处救火,同事请你在他电脑上解决问题,或者调试一下公司的服务器,都可能需要在陌生的环境上查阅代码,写一些脚本之类的东西。这时一个功能强大、跨平台且易得的编辑器就成为高手的必要条件。总不能对同事说,先等我装个编辑器,然后一顿下载安装操作,光是想想就丢份。 -
全栈工程师的法宝。
目前主流编程语言的 IDE 已经很成熟很方便了,更有 JetBrain 这类的全家桶连操作方式都统一,但对于全栈工程师来讲,这些还不够。虽然我认为“全栈工程师”是个伪命题,对于高度协作的社会,分工的细化是必然趋势,但在国内的 IT 环境里,全栈成了部分老程序员无奈的选择,尤其对于一些小公司,这类的需求还是有的。全栈工程师在一个项目里,可能要跟好几种编程语言打交道,对于其中的大多数都是改改需求,修修 bug 之类,需要大量阅读,但编码量不高的任务。先不说不同 IDE 操作方式的不同,就是它们吃内存,启动慢,龟速索引这些缺点,对于需要 IDE 多开,任务模式以短平快为主的全栈工程师来讲,都是不能容忍的。
说了 Vim 这么多优点,缺点也不能不提。首先就是它太原始了,毕竟是上世纪电脑刚兴起时的产物,无论从界面的美观还是对新事物的适应上来讲,都与这个时代有着强烈的脱节感。单纯的文本编辑还好,如果硬要把它当做 IDE 就会有点牵强。即便装了一堆插件,勉强可以应付使用,那也是跟主流 IDE 的感觉相去甚远。写写 C/C++,或者 Python 之类的脚本还说的过去,如果硬要拿来写那些类库丰富的高级语言,简直就是一场灾难。对于这些高级语言,我的态度仍是仅在临时要看某段代码或者改改参数时才用 Vim 打开,要是正儿八经搞开发还得用对口的 IDE。再一个就是插件的配置过程太复杂,好在这些都是一次性工作,搞出一套适合自己的配置存在云端,不夸张的讲是可以受用终身的。下面就进入正题,说说我对插件的选择和配置方法。
Vim 的插件推荐与配置:
首先说明的是这些插件的安装配置流程,在它们的 GitHub 官网大都有详细的说明。很多因为还在不定期更新中,可能流程也会跟着变,所以参考官网使用说明就是最好的选择,这里就不再赘述了,仅提供一些我在使用过程中的感受。这些官网都是英文介绍,如果有语言障碍,也可以在网上搜索网友们的经验贴,但在我看来这些贴子多数年代久远,也只能作为参考。如果想吃程序员这碗饭,最重要的还是得跟上信息时代的步伐,突破语言障碍,争取早日跟国外一手资料接轨。
-
Vundle 管理插件的插件:https://github.com/VundleVim/Vundle.vim
Vundle 的意义在于,只需简单的配置,就可以帮你自动安装所需的插件,后期升级也非常方便,尤其是在插件较多的时候,它就显得尤为重要。
推荐指数: ★★★★★ -
Denite 拥有暗黑能量般的感觉:https://github.com/Shougo/denite.nvim
大神 Shougo 的新作,前身也是由他开发的在插件界同样大名鼎鼎的 Unite,但由于 Unite 自身的技术限制,已经很难再提升了。用大神自己的话来讲,Denite 功能更简洁,速度也更快。我个人认为这应该是程序员的必备插件,尤其是那些做大项目,需要在海量内容中查找文件、检索文本的人来讲。使用它的前提是 Vim 8.0+ 以及 Python3.5+ 的支持,官网有详细的文档说明,最好能有一些 Vim 的开发经验,理解起来才会更容易;当然看不懂也没关系,即使是它的基础用法也足以值得拥有。尤其要强调的是,一定要配合rg (ripgrep)
一起使用。rg 是 grep 命令的多核优化版,支持多平台。点击这里 有关于它性能和原理的介绍。以我个人的感受,速度上大概比 grep 快个一百倍吧~,当你在几个 G 的工程目录中检索一个关键字,就会对它们的性能差异有更深刻的体会,可以说没有安装 rg 也就没有使用 Denite 的必要了。
推荐指数: ★★★★★ -
YouCompleteMe 强大的自动补全工具: https://github.com/Valloric/YouCompleteMe/issues
被网友誉为最难安装的 Vim 插件,但还是非常值得尝试的。它能带来多种语言的自动补全功能(需要 ctag 的辅助),甚至还包括路径的补全,对于工作效率的提升帮助极大。其实按照 官网文档 的步骤,下载并执行它的安装脚本,编译成功了也没多难;估计难就难在万一脚本执行失败了,就得手动安装。当然真到了这一步,官网也提供了详细的步骤,但具体是怎样的体验我就不清楚了,因为我在很多机器上安装都没被逼到这一步过。
推荐指数: ★★★★☆ -
Vim-AutoFormat 强迫症患者的福音:https://github.com/Chiel92/vim-autoformat
每次浏览那些格式凌乱的代码,强迫症就会发作,总想上手归置归置。现在好了,有了一键格式化插件,我再也不用担心犯病了~。相比起 IDE 中自带的 Auto Format 功能,这个插件很好的诠释了想要在 Vim 中添加一个简单需求,并不一定是一个简单事情的逻辑。当然付出更多努力并不是没有回报的,对于强迫着患者来说,IDE 中的格式化方式并不一定是最理想的,往往还没法做细致的自定义;而这个插件就能提供对各种语言,进行非常丰富格式化配置的能力。
推荐指数: ★★★★☆ -
TagList 一眼望穿一目了然:https://github.com/vim-scripts/taglist.vim
作为老牌插件,TagList 提供了对代码中方法、类、结构体、变量等指标提取的能力,再配合 Vim 强大的搜索功能,是快速熟悉一个几百上千行源码文件最好的方式。但是作为插件中的元老,一点都不思进取,上次更新还是八年前,对于新生语言的开发者,就显得有些鸡肋了。
推荐指数: ★★★★ -
UltiSnips & Snippets 一对酷炫好姐妹:https://github.com/SirVer/ultisnips & https://github.com/honza/vim-snippets
这俩一个是代码模板引擎,一个是各种语言的模板库。像是代码中常用的注释样式、循环、判断,方法之类有一定结构的代码,都能通过预定义的模板快速生成,然后在中间几处位置跳转修改,就能完成大段代码。如果是用来直播或者投影分享,在众人面前展现高手编程的潇洒,就最好不过了,绝对的装逼利器。这种方式虽然潇洒,但是要记住的模板代号也比较多,适合常年开发一种语言的程序员,全栈工程师表示真记不住那么多代号。
推荐指数: ★★★☆ -
NerdCommenter 不写注释的工程师,就该让他终身负责维护自己的代码:https://github.com/scrooloose/nerdcommenter
Vim 虽然有比较便捷的方式大段注释、反注释代码,但终究不如按一个钮来的方便。如果你习惯了写代码时添加必要的注释,先给你点个赞,相信这个会成为你的好帮手的。
推荐指数: ★★★☆
还有一些专业领域的插件(比如写 MarkDown 的,在 C/C++ 关联文件之间跳转的)也都不错,只是不太通用,这里就不做推荐了。
总结:
Vim 的插件虽然安装配置有些麻烦,但在功能上有着非常大的自由空间,尤其对于强迫症和洁癖患者,一直以来试图找寻完全适合自己风格的 Editor / IDE 来讲,非常值得一试。别看 Vim 已经是 IT 界化石般的存在,直到今天也还有它特定的使用场合。而且从历史的角度以发展的眼光来看,它大概率属于程序员能用一辈子的工具,只要想想这是件一劳永逸的事情,再困难也值得咬牙坚持。而且一旦度过了学习阶段,它的强大与便利给你带来的效率提升会受用终身,更不要说它自带的高手光环,在小白眼力早已是大牛们的贴身兵器,一旦祭出无不羡煞旁人。
最后附上我多年以来惯用的一套 Vim 配置,希望能给你点启发,最终攒出一套属于你的终极武器。