Why Vim?

为什么要使用Vim?

我们先看看其他人怎么说:


Vim or Emacs就好比倚天和屠龙,得一可得天下。 – By vimer.cn

Vim就像学钢琴一样,一旦学会,终身受益无穷。 –By Practical Vim


这些话都是出自vim高手之口,对于Vim新手,可能暂时没办法体会。而我使用Vim也有一段时间了,肯定不能算是高手,但至少也是一个熟手。

我现在主要使用Vim来编写c/c++、js、lua代码,我觉得非常方便,比Xcode和Eclise都强(调试部分可能相对弱一点)。当然,我还使用Vim来修改其它文档,比如Html、XML、文本文件等。现在我正在使用Vim书写本篇博文,非常酷,非常爽!

我转成Vim党的感受,一句话:


Vim streamline my daily workflow and boost my coding productivity.


现在,我客观地说明一下Vim的一些好处:


  • 跨平台、支持N(N>40)种编程语言
  • 可安装各种插件,也可以编写自定义的插件,编辑器功能可无限扩展。
  • 配合Git管理Vim配置和插件,可极大地提高编辑器的适配性
  • 小巧、安装方便、开源、免费
  • 可打造出属于自已的个性化IDE工作环境,提高生产率

Why not Vim?

为什么不使用Vim?

可能有以下几种声音:


  • Vim过时了,用Vim就是找虐,别装比了,专心学好数据结构与算法吧。
  • 我是Java党,我只用Eclipse,也能安装各种插件。我是.Net党,我喜欢强大的VS,也有牛比的插件(如VC助手)
  • 我是果粉,我喜欢Xcode的优雅,也是免费的,有苹果罩着,LLVM代码补全用着超爽。
  • 我也知道用Vim或者Emacs很强大,但是学习曲线真的很陡,我还是老老实实用我的IDE吧。
  • 我在用TextMate、Notepad++、Sumbline text 2,我用着很爽,这些也是神器,我不需要Vim。

我在这里不去说现代的IDE有什么不好,或者Vim相比于这些IDE来说有哪些优点。我知道这样说,又马上会引起一场语言之争,编辑器大战出来。其实,真的是没必要去纠结用什么开发工具,也没必要纠结用什么语言。

只是我觉得程序员天生就是用来折腾的。有牛人讲过一句话:


每年学习一门新的编程语言,而且这门语言跟你之前熟悉的语言关系越远越好


现在,我也呼吁一下吧:从现在起,学习一门新的文本编辑工具Vim,它跟你之前所用到的编辑器体验完全不一样。它的Modal Editing是独一无二的,程序员值得拥有。而且你不用每年换一个编辑器,因为你只需要一个Vim编辑器。你越了解它,越使用它,就越会对它爱不释手。

让我们一起来折腾吧!Vim, the Killer! Oh~Ye.:)

How to make Vim as a IDE?


Know the saw, then sharpen it.


很多人不使用Vim的原因很简单,除了不习惯它的Modal Editing之外,更多的是觉得它算不上一个IDE。但是,稍微对Vim有过了解的朋友都知道,Vim是可以被打造成一个IDE的,而且是专门属于自己的IDE。

关于如何把Vim打造成一个IDE,只要你现在随便谷歌一下,你肯定能找到一大堆贴子。但是,由于Vim历史悠久,有许多贴之已经过时了。

其中最主要的变化有:


  • 有些插件有新的替代插件了(因为站在巨人肩膀上的缘故)
  • 安装和管理插件的方式变了,以前是手动复制相应目录和文件,现在改为插件管理器+Github了。
  • 有些插件已经不推荐使用了

Recommended plugins

没有安装插件的Vim算不了什么,但是,一旦安装好插件,Vim立马就牛比了。这里,作为一名cocos2d-x游戏程序员,我给大家推荐一些插件,关于插件的用法,大家可以查看help文档,我这里就不赘述了。

Basic plugins

Pathogen:该插件用来管理Vim的插件,可以让插件的安装与卸载更加方便。配合Github和Submodule效果更佳。

NerdTree:该插件会生成工程目录树

TagBar:该插件生成函数、变量列表。之前有一个插件叫TagList,我觉得那个有点不好用,推荐TagBar

UltiSnips:类似TextMate的snippets,之前有个插件叫SnipMate,这个基于SnipMate,比SnipMate要强很多。强烈推荐。

vim-commentary:注释代码的插件。

syntastic:保存文件时检查语法的插件。

fugitive:方便在Vim里面使用Git的插件。

vim-colors-solarized:Vim颜色配色方案。

ctrlp:搜索目录下的文件,类似功能的插件有Comment-T,我喜欢ctrlp,因为它不依赖于ruby,且是轻量级的.

AutoClose:成对生成(),{},[]

vim-surround:给文本添加“外套”,呵呵,试试就知道有多强大了。

supertab:让tab键可以飞起来。

a:让cpp文件在.h和.cpp文件中切换。

buferexplorer:方便浏览buffer的插件。

clangComplete:自动代码补全的插件,比OmniCppComplete好N多,速度有一点影响。不过配合neocomplcache,加上这个版本,效率还不错。

neocomplcache:关键字补全、文件路径补全、tag补全等等,各种,非常好用,速度超快。

neocomplcache-clang:解决clang_complete和neocomplcache的冲突。

TagHightlight :根据生成的Tag文件,高亮类、变量、函数和关键字。

Bonus plugins

bufkill:让nerdTree在最后一个buffer窗口关闭时,不让其缩放。

vimprj:方便管理工程相关的vim配置。参考如何设置Vim为IDE中的第一篇E文。

vim-unimpaired:一些不错的配置,可以让[]发挥奇效。

vim-powerline:超有爱的状态栏。

vim-textobj-line:文本对象插件,可以操纵当前行。

更多插件,可以到我的Github上面去查看。可以从本博右上角Fork Me on Github处进入。当然,如果各种Vimer有什么好的插件,也欢迎推荐给我。

Troubleshootings

这部分主要记录我在打造神器的过程中遇到的一些问题:


  • Vim版本最好用gvim或者macvim,然后从源码编译最好。最好是支持python,ruby,cscope等,大部分vim发行版本都是支持这些特性的。
  • 使用Excubert-ctags和DoctorJs来生成tag文件,配合cscope效果好。如果是mac用户,自带的ctags不管用,需要用homebrew或者macport来安装
  • 配置pyclewn时,安装需要指定Editor和home设置。运行的时候,如果要让GDB支持tty,还需要重新安装GDB,最好是homebrew或者macport来安装。安装好之后,要给gdb添加codesigning。
  • windows版本下有些配置可能不太一样,特别是vimrc文件的配置,跟*nix系统不太一样。可以考虑用has(win32)之类的代码来区分vimrc配置。这样可以让vim运行在多个平台上。

References

Google + Wiki. :)


Posted by Guanghui.Qu Jan 15th, 2013