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