Ubuntu下配置一个高效的PHP开发环境GVIM

Vim本质上只是一个编辑器。但只要配合一些适当的插件,vim也能变成一个全功能的IDE。笔者使用vim已经有挺长一段时间了,经过反复的试验,配置了一个高效的PHP开发环境,实为居家旅行、谋财害命、杀人越货必备之良品。

安装Vim GVIM

sudo apt-get install vim

sudo apt-get install gvim

开始配置vim

Linux 下 vim 默认配置文件 /etc/vim/vimrc

用户默认配置文件 ~/.vimrc

如果想一次配置,所有用户都能使用,那就修改 /etc/vim/vimrc,如果只想当前用户可以使用,则修改 ~/.vim

针对开发配置:

au FileType php,c,java,javascript,html,htm call SetPhpOption()

function! SetPhpOption()

  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

这时tpl还是不行的,我们应该把tpl当成html处理

修改/vim/vim72/filtype.vim 加入

au BufNewFile,BufRead *.tpl setf html

用NERDTree实现目录和文件导航

在进行PHP应用开发时,同时编辑多个文件是很正常的事情。所以必须有一个方便的目录导航工具,以便在目录结构间快速切换,找到需要编辑的文件。

vim中提供该类功能的插件很多,比较知名的有project、winmanager等。但笔者个人认为最好用的还是The NERD Tree这个插件。NERDTree不但可以显示完整的目录树结构,还可以将任何一个目录设置为根目录。并且提供了目录导航的书签功能,可谓非常方便。

下载地址:http://www.vim.org/scripts/script.php?script_id=1658

下载文件: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可以列出已打开文件中定义的函数常量 ,甚至变量

下载地址:http://www.vim.org/scripts/script.php?script_id=273

下载文件:taglist_45.zip

压缩包需要完整解压缩到 ~/.vim/ 目录,并且用:helptags ~/.vim/doc命令索引taglist插件的帮助文档。

taglist插件需要依赖ctags程序才能工作。目前常用的ctags版本是Exuberant Ctags。

安装ctags

下载地址:http://ctags.sourceforge.net/

下载文件:ctags-5.8.tar.gz

解压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已经结合起来。

在相应的源码目录运行ctags -R产生相应的tags文件

cd ctags:cd ctags-5.8

ctags -R

拷贝到 ~/.vim/ 目录下

cp tags ~/.vim/

将tags文件在vim运行时导入。可以修改~/.vimrc,以后每次启动vim将自动导入此tags文件

:set tags=~/.vim/tags

并设置语法高亮

syntax enable

syntax on

此时再用vim编辑php文件,就会在右边出现一个当前文件的 类 函数 变量 等东西

使用ctags时,  ctrl+] 可查看函数的定义。  ctrl+o 返回源文件。

小技巧:

细心的朋友可能会发现,作为一个强大的IDE,还应该解决以下几个问题:

1.左边目录树结构不变。

2.代码块注释,删除注释。

3.代码块缩进,删除缩进。

解决问题:

1.一般情况下,我们会以标签的方式打开一个文件(让光标停留在一个要打开的文件上,按 t ),此时左边没有目录树,输入 :NERDTreeToggle打开目录树,此目录树为新建的,和第一个文件的目录树结构不同,这不符合我们普通IDE的习惯,还记得我们用Netbeans之类的编辑器吗?左边的目录书结构一直没变,其实是所有文件共享一颗树的原因,NERDTree也允许我们共享树,命令是 :NERDTreeMirror,结合Tlist,我的快捷方式定义如下:

map <F2> :NERDTreeToggle<CR>
map <F3> :TlistToggle<CR>
map <F4> t :NERDTreeMirror<CR>

现在,看看我写代码的习惯:

首先,打开vi编辑器。

按<F2> 打开目录树

把光标停留在需要建立标签的文件夹上, :Bookmark 收藏名。

以后只需要 <F2>打开目录树,Shift+B打开收藏标签,双击一下想打开的标签,再按一次Shift+B关闭收藏标签。

鼠标选中需要打开的文件,按快捷键 <F4>,此时,vi会先执行 t (标签方式打开文件),再执行:NERDTreeMirror共享第一棵树。

怎么样,效果和大型IDE差不多了吧。

2.代码块注释,删除注释

注释:ctrl+v 进入列编辑模式,向上或向下移动光标,把需要注释的行的开头标记起来,然后按大写的I,再插入注释符,比如"//",再按Esc,就会全部注释了。

删除:ctrl+v 进入列编辑模式,选中注释部分,然后按d,就会删除注释符号。

3.代码块缩进,删除缩进。

缩进:选择需要缩进的代码行(键盘鼠标都可以,选中了就行),>(shift+.)

删除:选择需要缩进的代码行(键盘鼠标都可以,选中了就行),<(shift+,)

下面是我一直使用的配置文件,有兴趣的朋友可以参考一下

.vimrc
  1. " An example for a vimrc file.
  2.  
  3. " disable VI's compatible mode..
  4. set nocompatible
  5.  
  6. " set encoding
  7. set encoding = utf8
  8.  
  9. " running in gui
  10. if has("gui_running")
  11.   " set color schema
  12.   colorscheme rootwater
  13. endif
  14.  
  15. " allow backspacing over everything in insert mode
  16. set backspace = indent ,eol,start
  17.  
  18. " Enable syntax highlight
  19. syntax enable
  20. syntax on
  21.  
  22. set tags =~/.vim/tags " tagslist文件
  23.  
  24. " Basic editing options
  25. set history = 50         " keep 50 lines of command line history
  26. set ruler             " show the cursor position all the time
  27. set showcmd           " display incomplete commands
  28. set number            " Show line number
  29. set mouse = a            " Have the mouse enabled all the time
  30. set incsearch         " do incremental searching 
  31. " set sts = 4
  32. set linebreak
  33.  
  34. " Develop editing options
  35. au FileType vim setl shiftwidth = 2
  36. au FileType vim setl tabstop = 2
  37. au FileType html,c,javascript,java,php setl shiftwidth = 4   " 当行之间交错时使用4个空格
  38. au FileType html,c,javascript,java,php setl tabstop = 4      " 用4个空格代替1个tab
  39. au FileType html,c,javascript,java,php setl expandtab     " 使用空格代替tab
  40. " au FileType java,php setl cursorline                    " 高亮当前行
  41. au FileType html,c,javascript,java,php setl nobackup      " 不备份
  42. au FileType html,c,javascript,java,php setl hlsearch      " 高亮显示所有匹配
  43. " au FileType html,c,javascript,java,php setl fdm = indent   " 代码折叠 
  44. " au FileType html,c,javascript,java,php setl showmatch   " 匹配模式,如:输入一个左括号,右括号自动加上
  45.  
  46. "au FileType php setl dictionary- =~/.funclist.txt
  47. "au FileType php setl dictionary+=~/.funclist.txt
  48. "au FileType php setl complete- = k
  49. "au FileType php setl complete+=k
  50.  
  51. set dictionary- =~/.vim/funclist.txt dictionary+=~/.vim/funclist.txt
  52.  
  53. set complete- = k  complete+=k
  54.  
  55. " Only do this part when compiled with support for autocommands.
  56. if has("autocmd")
  57.  
  58.   " Enable file type detection.
  59.   " Use the default filetype settings, so that mail gets 'tw' set to 72,
  60.   " 'cindent' is on in C files, etc.
  61.   " Also load indent files, to automatically do language-dependent indenting.
  62.   filetype plugin indent on
  63.  
  64.   " Put these in an autocmd group, so that we can delete them easily.
  65.   augroup vimrcEx
  66.   au!
  67.  
  68.   " For all text files set 'textwidth' to 78 characters.
  69.   autocmd FileType text setlocal textwidth = 78
  70.  
  71.   " When editing a file, always jump to the last known cursor position.
  72.   " Don't do it when the position is invalid or when inside an event handler
  73.   " (happens when dropping a file on gvim).
  74.   autocmd BufReadPost *
  75.     / if line("'/"") >  0 && line("'/"")  < = line("$") |
  76.     /   exe "normal! g`/"" |
  77.     / endif
  78.  
  79.   augroup END
  80.  
  81. else
  82.  
  83.   set autoindent        " always set autoindenting on
  84.  
  85. endif " has("autocmd")
  86.  
  87. source ~/.vim/map.vim     " 导入快捷键映射文件
  88. source ~/.vim/taglist.vim " 导入taglist配置文件
快捷键映射文件
  1. " gd 模式,左:h 右:l 上:j 下:k
  2. map Q gq
  3.  
  4. " switch buffers with Tab
  5. map < C-Tab >  :bn < CR >
  6. map < S-Tab >  :bp < CR >
  7.  
  8. " NERDTree
  9. map < F2 >  :NERDTreeToggle < CR >
  10. map < F3 >  :TlistToggle<CR>
  11. map <F4> t :NERDTreeMirror<CR>
  12.  
  13. nmap   < silent >   < F8 >  :call SvnDiffToggle()<CR>
  14. nmap    < silent >  g < F8 >  :new __SVN_DIFF__ < CR > :read !svn diff < CR > :set  syntax = diff   buftype = nofile < CR > gg
  15. function SvnDiffToggle()
  16.   if bufexists("__SVN_DIFF__")
  17.     bwipeout __SVN_DIFF__
  18.   else
  19.     if exists("t:flwsvndiff")
  20.       diffoff!
  21.       let l:fileName  =  t :flwsvndiff
  22.       unlet t:flwsvndiff
  23.       exec "bwipeout " . l:fileName
  24.     else
  25.       let t:flwsvndiff  =  expand ("%:h") . "/.svn/text-base/" . expand("%:t") . ".svn-base"
  26.       let l:ft  = &ft
  27.       exec "silent vert diffsplit " . t:flwsvndiff
  28.       set readonly
  29.       set buftype = nofile
  30.       exec "set ft =" . l:ft
  31.       wincmd p
  32.       autocmd VimResized * :wincmd  =
  33.     endif
  34.   endif
  35. endfunction
taglist配置文件
  1. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  2. " =>  Plugin configuration
  3. """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  4. " taglist  
  5. set tags=~/.vim/tags
  6.  
  7. let Tlist_Ctags_Cmd="/usr/local/bin/ctags"
  8. let Tlist_Auto_Highlight_Tag  =  1
  9. let Tlist_Auto_Open  = 0
  10. let Tlist_Auto_Update  =  1
  11. let Tlist_Close_On_Select  =  0
  12. let Tlist_Compact_Format  =  0
  13. let Tlist_Display_Prototype  =  0
  14. let Tlist_Display_Tag_Scope  =  1
  15. let Tlist_Enable_Fold_Column  =  0
  16. let Tlist_Exit_OnlyWindow  = 1
  17. let Tlist_File_Fold_Auto_Close  =  0
  18. let Tlist_GainFocus_On_ToggleOpen  =  1
  19. let Tlist_Hightlight_Tag_On_BufEnter  =  1
  20. let Tlist_Inc_Winwidth  =  0
  21. let Tlist_Max_Submenu_Items  =  1
  22. let Tlist_Max_Tag_Length  =  30
  23. let Tlist_Process_File_Always  =  0
  24. let Tlist_Show_Menu  = 1
  25. let Tlist_Show_One_File  = 1
  26. let Tlist_Sort_Type  =  "order"
  27. let Tlist_Use_Horiz_Window  =  0
  28. let Tlist_Use_Right_Window  =  1
  29. let Tlist_WinWidth  =  30
  30. let tlist_php_settings  =  'php;c:class;i:interfaces;d:constant;f:function'

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值