花了大概2、3天在gvim上,试了很多插件,总体感觉还是有点菜。也不是gvim菜,关键是插件特别是ctags对php的支持太菜。
这部分已经作了修正,详细情况请看comments。

1. 安装:

要装的东西还蛮多的:
1. gvim本体,下载windows的或者linux的都可以
2. 文件夹管理器(项目文件管理器),推荐:NERDTree
3. 代码文件解析器:ctags。可以参考下别人翻译的中文手册,更具体的细节参考这里。ctags绝对是整个编辑器最核心的一个组件,关于对php的支持还可以参考:某人用c写的一个做phptag的工具文件和已经打好php补丁的ctags可执行文件
4. 代码文件结构查看:taglist
5. 文件查找工具:lookupfile或者FuzzyFinder
6. 代码补全:phpcomplete
东西就简单列下,安装就基本不用说什么了,直接往里面放就是了,文件往对应的目录里放。

2. 配置:

这里简单贴下我的vimrc文件,里面都有注释,稍微看下就好,基本的配置都在这个配置文件里(vim的配置文件"表示注释开始,有点怪异,下面的代码用vb的style来展示的,将就着看吧。。。)
[codesyntax lang="vb"]

" ---------------------------------------------------------------------------------------------|
" Workspace & Project
" ---------------------------------------------------------------------------------------------|
let $proj='E:\project'
let $bookmark=$vim.'\NerdBookmarks'
let $ctagsroot=$vim.'\ctags58\ctags.exe'
let $tagsfile=$vim.'\tagsfile'

" ---------------------------------------------------------------------------------------------|
" Configurations
" ---------------------------------------------------------------------------------------------|
set guifont=monaco:h14       " 设置字体
au GUIENTER * simalt ~x      " 打开Vim同时最大化
set nocompatible             " 去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
set nu                       " 显示行号
set history=1000             " 记录历史的行数
set autoread                 " 当文件在外部有改动时,自动加载
set autoindent               " 自动对齐,也就是把当前行的对起格式应用到下一行
set smartindent              " 依据上面的对齐格式,智能的选择对齐方式
set showmatch                " 设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set guioptions-=T            " 去除vim的GUI版本中的toolbar
set ruler                    " 在编辑过程中,在右下角显示光标位置的状态行
set hlsearch                 " 寻找匹配是高亮度显示的
set expandtab                " 使用空格替换tab
set tabstop=4                " 用4个空格代替1个tab
set shiftwidth=4             " 设定 << 和 >> 命令移动时的宽度为 4
set sts=4                    " 设置softtabstop 为 4,输入tab后就跳了4格
set wrap                     " 自动换行
set encoding=utf-8           " 默认使用utf-8编码
set langmenu=zh_CN.UTF-8     " 界面中文
language message zh_CN.UTF-8 " 默认使用utf-8编码
set filetype=php:.php.inc    " 将php和inc后缀的文件作为php类型看待

filetype on                  " 检测文件的类型
syntax enable                " 语法高亮度显示
syntax on                    " 语法高亮度显示
colorscheme desert           " 设置配色模式

" ---------------------------------------------------------------------------------------------|
" Shortcut configurations
" ---------------------------------------------------------------------------------------------|
map  <F9>  :call TabInit()<CR>
map  <F10> :NERDTreeToggle $proj<CR>   " F1打开/关闭NERDTree
map  <F11> :TlistToggle<CR>            " F10打开/关闭taglist
map  <F12> <Esc>:call MakeTags()<CR>   " F12生成一个tags文件
map  <C-h> :tabp<CR>                   " 上个标签
map  <C-l> :tabn<CR>                   " 下个标签
map  <C-j> :tabnew<CR>                 " 新标签
map  <C-k> :tabc<CR>                   " 关闭标签

" ---------------------------------------------------------------------------------------------|
" NERDTree configurations
" ---------------------------------------------------------------------------------------------|
let NERDTreeBookmarksFile=$bookmark    " bookmark列表文件
let NERDTreeShowBookmarks=1            " 默认显示bookmark

" ---------------------------------------------------------------------------------------------|
" TageList configurations
" ---------------------------------------------------------------------------------------------|
let Tlist_Ctags_Cmd=$ctagsroot         " 配置taglist的ctags路径
let Tlist_Exit_OnlyWindow=1            " 如果taglist窗口是最后一个窗口,则退出 vim
let Tlist_File_Fold_Auto_Close=1       " 让当前不被编辑的文件的方法列表自动折叠起来
let Tlist_Show_Menu=1                  " 显示taglist菜单
let Tlist_Enable_Fold_Column=1         " 显示折叠标记
"let Tlist_Show_One_File=1             " 不同时显示多个文件的tag,只显示当前文件的
"let Tlist_Auto_Open=1                 " 启动vim自动打开taglist
"let Tlist_Use_Horiz_Window=0          " 是否横向展示taglist窗口
"let Tlist_Use_Left_Window=0           " 在左边窗口显示taglist窗口
"let Tlist_Use_Right_Window=1          " 在右边窗口显示taglist窗口

" ---------------------------------------------------------------------------------------------|
" Global Display Commands configurations
" ---------------------------------------------------------------------------------------------|
autocmd VimEnter * nested call VimInit()  " Vim窗口初始化

" ---------------------------------------------------------------------------------------------|
" Out source vim configurations
" ---------------------------------------------------------------------------------------------|
source $VIMRUNTIME/vimcdoc.vim         " Vim plugin to set the default help language to Chinese
source $VIMRUNTIME/vimrc_example.vim   " An example for a vimrc file
source $VIMRUNTIME/mswin.vim           " Set options and add mapping such that Vim behaves a lot like MS-Windows
behave mswin

" ---------------------------------------------------------------------------------------------|
" Functions
" ---------------------------------------------------------------------------------------------|
" Vim Init
function VimInit()
  Tlist
  NERDTree $proj
  exec 'split'
  exec 'wincmd j'
  exec 'buffer 2'
  exec 'wincmd l'
  exec 'q'
endfunction

" Tab Init
function TabInit()
  Tlist
  NERDTreeMirror
  exec 'split'
  exec 'wincmd j'
  exec 'buffer __Tag_List__'
  exec 'wincmd l'
  exec 'q'
endfunction

" Make Tags
function MakeTags()
  exec 'cd $proj'
  exec '!ctags -R --langmap=php:.php.inc -f '.$tagsfile
endfunction

" diffexpr
set diffexpr=MyDiff()
function MyDiff()
  let opt = '-a --binary '
  if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
  if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
  let arg1 = v:fname_in
  if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
  let arg2 = v:fname_new
  if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
  let arg3 = v:fname_out
  if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
  let eq = ''
  if $VIMRUNTIME =~ ' '
    if &sh =~ '
lt;cmd'
      let cmd = '""' . $VIMRUNTIME . '\diff"'
      let eq = '"'
    else
      let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
    endif
  else
    let cmd = $VIMRUNTIME . '\diff'
  endif
  silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction

[/codesyntax]

3. 问题

如果,这里只说如果,如果所有的插件都能按他们所描述的功能工作的话,那么这个IDE是非常完美的,没有任何的瑕疵。
但是就是有问题,关键在于ctags,所有的后续的几个插件,包括文件查找、代码补全、taglist等等,都需要ctags创建的tags索引来做支持。
在ctags对php支持不好的情况下,是在是没有办法使用。虽然我在网上看了很多很简单就配置成功的例子,但是不知道为什么我的代码库就是不行。
两种可能性,一种是我使用的ctags没有针对php做好的优化,另一种可能性就是我使用的autoload方法对于ctags的支持并不好,可能ctags需要include语句来包含代码(可能性很低,因为在创建tag的时候ctags都是逐个目录文件扫过去的)。
研究了很长时间,但是对于这个ctags始终是没辙,结果就算了,毕竟这么弄下去也不是办法,暂时用回eclipse。
至少eclipse的代码补全、文件查找、tags创建都是自己完成的,虽然说支持也不是太好,毕竟没什么问题。
但是反过来说,如果能找到对tags比较好的支持的话,用vim还是一个不错的选择,毕竟作为文本编辑工具vim的效率比eclipse实在是高出太多太多。有时候以后再研究。

4. Appendix

接下去列一些比较有用的blog:
易水的blog,有很详细的vim相关系列贴,这里给出入口
“把VIM打造成一个真正的IDE”系列贴,感觉不错:分为篇1篇2篇3
这个帖子介绍了如何整合winmanager和NERDTree