Vim本质上只是一个编辑器。但只要配合一些适当的插件,vim也能变成一个全功能的IDE。笔者使用vim已经有挺长一段时间了,通过反复的试验,配置了一个高效的PHP开发环境,实为居家旅行、谋财害命、杀人越货必备之良品。javascript
安装Vim GVIM
普通方式安装php
sudo apt-get install vimhtml
sudo apt-get install vim-gtk vim-doc cscopejava
卸载Vim GVIM
普通安装方式卸载编辑器
sudo apt-get remove --purge vim (--purge 是彻底删除,会连配置文件一块儿删除)svn
sudo apt-get remove --purge vim-gtk vim-doc cscope函数
sudo apt-get clean工具
编译安装方式卸载
进入以前编译安装时的目录:make uninstall
开始配置vim
Linux 下 vim 默认配置文件 /etc/vim/vimrc
用户默认配置文件 ~/.vimrc
若是想一次配置,全部用户都能使用,那就修改 /etc/vim/vimrc,若是只想当前用户可使用,则修改 ~/.vimrc
针对开发配置
auFileTypephp,c,java,javascript,html,htm,smarty call SetOption()
function! SetOption()
set expandtab " 使用空格代替tab
set shiftwidth=4 " 设定 <> 命令移动时的宽度为 4
set tabstop=4 " 用4个空格代替1个tab
set sts=4 " 设置softtabstop 为 4,输入tab后就跳了4格.
set cindent " C语言方式缩进
set smartindent " 智能缩进
set autoindent " 自动缩进
set smarttab " 只在行首用tab,其余地方的tab都用空格代替
set showmatch " 在输入括号时光标会短暂地跳到与之相匹配的括号处
" set fdm=indent "代码折叠
set lbr
set tw=500
set wrap " 自动换行
endfunction
个性化定制标签
Gvim 标签订制
set guitablabel=%{ShortTabLabel()}
functionShortTabLabel ()
let bufnrlist = tabpagebuflist (v:lnum)
let label = bufname (bufnrlist[tabpagewinnr (v:lnum) -1])
let filename = fnamemodify (label, ':t')
returnfilename
endfunction
Vim 标签订制
set tabline=%!MyTabLine()
functionMyTabLine()
let s = ''
fori in range(tabpagenr('$'))
" 选择高亮
ifi + 1 == tabpagenr()
let s .= '%#TabLineSel#'
else
let s .= '%#TabLine#'
endif
" 设置标签页号 (用于鼠标点击)
let s .= '%'. (i + 1) .'T'
" MyTabLabel() 提供完整路径标签 MyShortTabLabel 提供文件名标签
let s .= ' %{MyShortTabLabel('. (i + 1) .')} '
endfor
" 最后一个标签页以后用 TabLineFill 填充并复位标签页号
let s .= '%#TabLineFill#%T'
" 右对齐用于关闭当前标签页的标签
iftabpagenr('$') > 1
let s .= '%=%#TabLine#%999Xclose'
endif
returns
endfunction
" 文件名标签
functionMyShortTabLabel(n)
let buflist = tabpagebuflist(a:n)
let label = bufname (buflist[tabpagewinnr (a:n) -1])
let filename = fnamemodify (label, ':t')
returnfilename
endfunction
"完整路径标签
functionMyTabLabel(n)
let buflist = tabpagebuflist(a:n)
let winnr = tabpagewinnr(a:n)
returnbufname(buflist[winnr - 1])
endfunction
" vim 标签样式
" TabLineFill tab pages line, where there are no labels
hi TabLineFill term=none
hi TabLineFill ctermfg=DarkGrey
hi TabLineFill guifg=#777777
" TabLineSel tab pages line, active tab page label
hi TabLineSel term=inverse
hi TabLineSel cterm=none ctermfg=yellow ctermbg=Black
hi TabLineSel gui=none guifg=yellow guibg=Black
" Develop editing options
au FileTypevim setl expandtab
au FileTypevim setl shiftwidth=2
au FileTypevim setl tabstop=2
个性化定制状态栏
Statusline
" 显示状态栏(默认值为 1,没法显示状态栏)
set laststatus=2
" Format the statusline
set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{CurDir()}E5%h\ \ \ Line:\ %l/%L:%c
function! CurDir()
let curdir = substitute(getcwd(),'/Users/amir/',"~/","g")
returncurdir
endfunction
用NERDTree实现目录和文件导航
在进行PHP应用开发时,同时编辑多个文件是很正常的事情。因此必须有一个方便的目录导航工具,以便在目录结构间快速切换,找到须要编辑的文件。
vim中提供该类功能的插件不少,比较知名的有project、winmanager等。但笔者我的认为最好用的仍是The NERD Tree这个插件。NERDTree不但能够显示完整的目录树结构,还能够将任何一个目录设置为根目录。而且提供了目录导航的书签功能,可谓很是方便。
下载文件:NERD_tree.zip
解压缩时,要把压缩包中的目录结构完整的解压缩到 ~/.vim/ 目录中。完成后,应该分别找到 ~/.vim/doc/NERD_tree.txt 文件和 ~/.vim/plugin/NERD_tree.vim 文件。而后在vim中输入命令: helptags ~/.vim/doc,将NERDTree的帮助文档添加到vim中。
如今,命令模式下输入:NERDTreeToggle即可打开或关闭NERDTree
注意:使用过程当中,你可能会由于删除一个文件夹,而没有删除这个文件夹所绑定的标签,出现如下错误
NERDTree: 1 invalid bookmarks w...
解决:打开~/.vim/.NERDTreeBookmarks,删除里面无用的标签便可。
用taglist实现代码导航
解决了目录和文件导航问题,咱们还要为代码之间的跳转提供辅助手段,taglist就是这样一个插件。taglist能够列出已打开文件中定义的类、函数、常量,甚至变量。
压缩包须要完整解压缩到 ~/.vim/ 目录,而且用:helptags ~/.vim/doc命令索引taglist插件的帮助文档。
taglist插件须要依赖ctags程序才能工做。目前经常使用的ctags版本是Exuberant Ctags。
安装ctags
下载地址:http://ctags.sourceforge.net/
解压ctags:tar -zxcf ctags-5.8.tar.gz
进入ctags:cd ctags-5.8
打上PHP补丁(不然按下ctrl+n,连基本的function include等函数都出不来):
wget http://svn.bitflux.ch/repos/public/misc/ctags-php5.patch
patch php.c ctags-php5.patch
编译安装:
./configure
make
sudo make install
通过这三步后就生成 /usr/local/bin/ctags
继续回来修改~/.vim/plugin/taglist.vim
在 if !exists('loaded_taglist')上面加入
let Tlist_Ctags_Cmd="/usr/local/bin/ctags"
或加在~/.vim/.vimrc文件,只要能让vim开启时加载的*.vim文件便可
此时Ctags和Taglist已经结合起来,再用vim编辑php文件,执行:TlistToggle 就会在右边出现一个当前文件的 类 函数 变量 等东西
还记得咱们使用netbeans eclipse等大型开发工具的时候吗,按着 ctrl + 鼠标左键 点击一个函数,就会跳转到该函数定义处,他其实也是使用的tags跟踪跳转,只不过他们会自动去扫描源码目录,生成一个tags文件(是否曾经为netbeans没完没了的扫描崩溃过?),而vim须要咱们本身去生成这个tags。这个功能对代码跟踪很是有好处,下面咱们就来实现他
在相应的源码目录运行ctags -R产生相应的tags文件
cd ~/www/mysite
ctags -R *
打开vim
:cd ~/www/mysite
:set tags=tags
如今,咱们设置好了tags选项,接下来咱们使用它,咱们先来查找一个名叫make_html的方法:
方法一:
:tag make_html
若是make_html方法的定义只存在一个文件中你会看到VIM打开了该文件,并把光标定位到make_html方法所在行上。
若是make_html方法的定义存在多个文件中,会提示:
找到 tag:1 / 14 或更多
这时咱们能够列出保护这个方法的全部文件
:tselect "显示列表
这时会列出全部文件,让咱们选择一个文件打开
# pri kind tag 文件
> 1 F C f make_html function/my_function.php
2 F f make_html xxx/xxx.php
键入数字和回车(empty cacels) :
根据提示输入咱们想查看的文件对应的序号而后回车就能够了。
:tn "显示后一个tag到的PHP文件
:tp "显示前一个tag到的PHP文件
:tags "显示标签栈
咱们还能够把鼠标停留在想要跳转的 类 函数 变量 上面,而后按 ctrl + ] ,回到原来位置是 ctrl + t
方法二:
把鼠标停留在 make_html 上面,而后按ctrl+],怎么样,和直接输入:tag make_html 是如出一辙的吧
如今,咱们已经跳转到make_html函数的定义处,看到了函数的详细定义,明确知道如何使用这个函数了,那怎么回到原来的位置呢,答案是按ctrl+o 返回。
小技巧:
细心的朋友可能会发现,做为一个强大的IDE,还应该解决如下几个问题:
1.左边目录树结构不变。
2.代码块注释,删除注释。
3.代码块缩进,删除缩进。
解决问题:
1.通常状况下,咱们会以标签的方式打开一个文件(让光标停留在一个要打开的文件上,按 t ),此时左边没有目录树,输入 :NERDTreeToggle打开目录树,此目录树为新建的,和第一个文件的目录树结构不一样,这不符合咱们普通IDE的习惯,还记得咱们用Netbeans之类的编辑器吗?左边的目录书结构一直没变,实际上是全部文件共享一颗树的缘由,NERDTree也容许咱们共享树,命令是 :NERDTreeMirror,结合Tlist,个人快捷方式定义以下:
map :NERDTreeToggle
map :TlistToggle
map t :NERDTreeMirrorgTwgtw
如今,看看我写代码的习惯:
首先,打开vi编辑器。
按 F2 打开目录树
把光标停留在须要创建标签的文件夹上, :Bookmark 收藏名。
之后只须要 打开目录树,Shift+B打开收藏标签,双击一下想打开的标签,再按一次Shift+B关闭收藏标签。
鼠标选中须要打开的文件,按 F4快捷键 ,此时,vi会先执行 t (标签方式打开文件),再执行:NERDTreeMirror共享第一棵树,后面一串是为了保持以前打开的文件便签仍是显示文件名用的。
怎么样,效果和大型IDE差很少了吧。
2.代码块注释,删除注释
注释:ctrl+v 进入列编辑模式,向上或向下移动光标,把须要注释的行的开头标记起来,而后按大写的I,再插入注释符,好比"//",再按Esc,就会所有注释了。
删除:ctrl+v 进入列编辑模式,选中注释部分,而后按d,就会删除注释符号。
3.代码块缩进,删除缩进。
缩进:选择须要缩进的代码行(键盘鼠标均可以,选中了就行),>(shift+.)
删除:选择须要缩进的代码行(键盘鼠标均可以,选中了就行),