搭建Vim为自定义的PHP开发工具的一些技巧


Posted in PHP onDecember 11, 2015

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

安装 vim
鉴于大多数读者都是使用Windows 环境,所以本文就以 Windows 作为运行环境。不过由于 vim 出色的跨平台特性,配置文件只需简单修改就可以在 Linux 版本的 vim 中使用。

目前 vim 的最新版本是 7.2 ,如果没有特别原因建议安装最新的版本。

下载地址: http://www.vim.org/download.php#pc
下载文件: ftp://ftp.vim.org/pub/vim/pc/gvim72.exe

安装时 不要装到带有空格、中文的目录中 ,其他保持默认即可。笔者的安装目录是 c:/apps/office/vim ,后文也以此为准。为了叙述方便,笔者用 $VIM 来表示 vim 的安装目录。例如您的 vim 安装在 d:/vim/ 中,那 $VIM 就代表 d:/vim/ 。

开始配置 vim
我们对 vim 的配置分为几个步骤。

修改 _vimrc 后自动生效

打开 $VIM 目录,可以看到其中有一个 _vimrc 文件,用 vim 打开此文件,删除所有内容后,在最后插入两行:

" autoload _vimrc
autocmd! bufwritepost _vimrc source %

上述命令让我们通过 vim 编辑 _vimrc 文件并保存时,可以自动载入 _vimrc 文件,使得我们对 vim 的定制可以立即生效(无需重启 vim )。

使 vim 中文化

在 _vimrc 顶部增加下列文本:

" disable VI's compatible mode..
set nocompatible

" set encoding=utf-8
set fileencodings=ucs-bom,utf-8,gbk,default,latin1

" use chinese help
set helplang=cn

上述代码的作用是禁用 vi 兼容模式(原始的 vi 功能太少了,没必要考虑兼容)、按照 utf-8 、 gbk 的顺序来检测文件编码,并设置帮助为中文。不过设置 set helplang=cn 并不能马上看到中文帮助,我们还得下载中文帮助文件。

下载地址: http://vimcdoc.sourceforge.net/
下载文件: vimcdoc-1.6.0.tar.gz

得到中文帮助文件压缩包后,将压缩包中 doc 子目录的所有文件复制到 $VIM/vimfiles/doc 目录中。此时再输入 :help 命令就可以看到中文帮助了。

中文帮助还是 7.1 版的,不过不影响我们使用。

设置字体

选择 vim 菜单的“编辑” -> “选择字体”,就可以为 vim 指定喜欢的显示字体了。笔者使用的是 Consolas 字体,大小设置为 9pt 。这个设置显示代码非常漂亮,不过中文就有点变形了。

设置好后,输入命令 :set guifont 可以查看到当前的字体设置,将该设置写入 _vimrc 文件。

"set gui options
if has("gui_running")
 set guifont=Consolas:h9
endif

上述代码中的 if … endif 是一个条件判断结构。指示只有当我们使用图形界面版的 vim 时才设置字体。

为编辑 PHP 代码进行基本设置

现在用 vim 打开 .php 文件看上去是很难看的,别说代码高亮,连行号都没有显示。所以还要给 _vimrc 添加以下内容:

" Enable syntax highlight
syntax enable
 
" Show line number
set nu

" show matching bracets
set showmatch
 
" Basic editing options
set expandtab
set shiftwidth=2
 
au FileType html,python,vim,javascript setl shiftwidth=2
au FileType html,python,vim,javascript setl tabstop=2
au FileType java,php setl shiftwidth=4
au FileType java,php setl tabstop=4
 
set smarttab
set lbr
set tw=0
 
"Auto indent
set ai
 
" Smart indet
set si
 
" C-style indeting
set cindent
 
" Wrap lines
set wrap

上述设置启用了格式化高亮、行号显示,以及括号匹配、自动缩进等编辑功能,对于大多数情况都可以获得理想的编辑体验。不过此时对 .php 文件的支持还不完善,需要下载专门的 php 插件。

下载地址: http://www.vim.org/scripts/script.php?script_id=1571
下载文件: php.tar.gz

将其中的 php.vim 复制到 $VIM/vimfiles/syntax 目录中即可。

设置喜欢的配色方案

默认的配色方案相信没几个人会喜欢,可以通过下面的网址查看配色方案并下载(有几百个哦)。

下载网址: http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html

这个网址列出了 300 多个配色方案以及实际的显示效果,点击方案名称即可下载到一个 .vim 文件。将该文件放入 $VIM/vimfiles/colors 目录,然后在 _vimrc 中添加:

" set color schema
colorscheme oceandeep

这两行代码需要加到 if has("gui_running") … endif 代码块中,例如:

if has("gui_running")
 set guifont=Consolas:h9
 " set color schema
 colorscheme oceandeep
endif

设置后显示效果就漂亮多了 :-) ­

更多有用的编辑设置

虽然不是专门针对编辑 .php 文件的设置,但这些选项可以让 vim 更好用,所以建议加上:

" Sets how many lines of history VIM har to remember
set history=400
 
" Set to auto read when a file is changed from the outside
set autoread
 
" Have the mouse enabled all the time:
set mouse=a
 
" Do not redraw, when running macros.. lazyredraw
set lz
 
" set 7 lines to the curors - when moving vertical..
set so=7
 
" The commandbar is 2 high
set cmdheight=2
 
" Change buffer - without saving
set hid
 
" Ignore case when searching
" set ignorecase
set incsearch
 
" Set magic on
set magic
 
" No sound on errors.
set noerrorbells
set novisualbell
set t_vb=
 
" How many tenths of a second to blink
set mat=4
 
" Highlight search things
set hlsearch
 
" Turn backup off
set nobackup
set nowb
set noswapfile
 
" smart backspace
set backspace=start,indent,eol
 
" switch buffers with Tab
map <C-Tab> :bn<CR>
map <S-Tab> :bp<CR>

 

经过一番改造,我们的 vim 已经可以很顺手地编辑 .php 文件了。不过要打造 php 开发环境还有很多工作要做呢。

打造 PHP IDE

IDE 左侧是目录导航,中间是编辑区域,而右侧则是方法列表,用于在已经打开的文件中快速跳转。在编辑区域按下 CTRL+X 键,还会显示已打开文件的列表。

其他诸如自动补全、代码模板等功能,都应有尽有。看过了漂亮的截图,我们就来一步步打造 PHP IDE 吧。

用 NERDTree 实现目录导航

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

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

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

解压缩时,要把压缩包中的目录结构完整的解压缩到 $VIM/vimfiles 目录中。完成后,应该分别找到 $VIM/vimfiles/doc/NERD_tree.txt 文件和 $VIM/vimfiles/plugin/NERD_tree.vim 文件。然后在 vim 中输入命令 :helptags $VIM/vimfiles/doc ,将 NERDTree 的帮助文档添加到 vim 中。

最后在 _vimrc 添加如下内容:

" NERDTree
map <F10> :NERDTreeToggle<CR>

重启 vim 后,按下 F10 键,就可以在左侧看到一个目录树了。在目录树窗口中按下 ? 键可以查看详细的帮助信息。 

最常用的操作键有:

搭建Vim为自定义的PHP开发工具的一些技巧

此外在目录树窗口中输入目录 :Bookmark 收藏名 还可以将光标所在目录添加到收藏夹中。下次使用 :BookmarkToRoot 收藏名 可以直接转到该目录,并且以该目录作为根目录。更多命令可以参考 NERDTree 的帮助文档。

用 taglist 实现代码导航

解决了目录和文件导航问题,我们还要为代码之间的跳转提供辅助手段, taglist 就是这样一个插件。 taglist 可以列出已打开文件中定义的类、函数、常量,甚至变量。

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

压缩包需要完整解压缩到 $VIM/vimfiles 目录,并且用 :helptags $VIM/vimfiles/doc 命令索引 taglist 插件的帮助文档。 taglist 插件需要依赖 ctags 程序才能工作。目前常用的 ctags 版本是 Exuberant Ctags 。

下载地址: http://ctags.sourceforge.net/
下载文件: ec57w32.zip

只需要把压缩包中的 ctags.exe 复制到 $VIM/vim72 目录中即可。 ctags.exe 应该和 gvim.exe 在一个目录。

最后在 _vimrc 添加下列内容,设置好 taglist 插件:

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" => Plugin configuration
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" taglist
let Tlist_Auto_Highlight_Tag = 1
let Tlist_Auto_Open = 1
let Tlist_Auto_Update = 1
let Tlist_Close_On_Select = 0
let Tlist_Compact_Format = 0
let Tlist_Display_Prototype = 0
let Tlist_Display_Tag_Scope = 1
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 0
let Tlist_File_Fold_Auto_Close = 0
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Hightlight_Tag_On_BufEnter = 1
let Tlist_Inc_Winwidth = 0
let Tlist_Max_Submenu_Items = 1
let Tlist_Max_Tag_Length = 30
let Tlist_Process_File_Always = 0
let Tlist_Show_Menu = 0
let Tlist_Show_One_File = 0
let Tlist_Sort_Type = "order"
let Tlist_Use_Horiz_Window = 0
let Tlist_Use_Right_Window = 1
let Tlist_WinWidth = 40
let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'

在vim中检查php语法格式
打开你的_vimrc,将如下配置写入并保存。

“检查当前文件代码语法(php){{{

function! CheckSyntax()
 if &filetype!=”php”
 echohl WarningMsg | echo “Fail to check syntax! Please select the right file!” | echohl None
 return
 endif
 if &filetype==”php”
 ” Check php syntax
 setlocal makeprg=\”php\”\ -l\ -n\ -d\ html_errors=off
 ” Set shellpipe
 setlocal shellpipe=>
 ” Use error format for parsing PHP error output
 setlocal errorformat=%m\ in\ %f\ on\ line\ %l
 endif
 execute “silent make %”
 set makeprg=make
 execute “normal :”
 execute “copen”
endfunction
map <F6> :call CheckSyntax()<CR>
“}}}

 然后我们按下F6就可以执行啦~~ 注意

if &filetype!=“php”
 echohl WarningMsg | echo “Fail to check syntax! Please select the right file!” | echohl None
 return
endif

这一段,是规定了必须是.php格式的文件,所以不要拿成错文件来试哦

OK,我们来测试一下,新建一个php文件phpinfo.php,写入如下代码

<?php phpinfo()>>?>

当然,很明显语法是错误的,按下F6,结果如下:

搭建Vim为自定义的PHP开发工具的一些技巧

修改为

<?php phpinfo()?>

并保存后,按下F6,结果如下:

搭建Vim为自定义的PHP开发工具的一些技巧

PHP 相关文章推荐
php 禁止页面缓存输出
Jan 07 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
解析thinkphp的左右值无限分类
Jun 20 PHP
PHP四舍五入精确小数位及取整
Jan 14 PHP
PHP实现将视频转成MP4并获取视频预览图的方法
Mar 12 PHP
PHP中Session和Cookie是如何操作的
Oct 10 PHP
PHP设计模式之迭代器模式
Jun 17 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
Nov 14 PHP
浅谈PHP实现大流量下抢购方案
Dec 15 PHP
对laravel的csrf 防御机制详解,及form中csrf_token()的存在介绍
Oct 24 PHP
PHPExcel实现的读取多工作表操作示例
Apr 14 PHP
WordPress伪静态规则设置代码实例
Dec 10 PHP
PHP开发中AJAX技术的简单应用
Dec 11 #PHP
基于PHP如何把汉字转化为拼音
Dec 11 #PHP
PHP异常处理Exception类
Dec 11 #PHP
编写PHP脚本来实现WordPress中评论分页的功能
Dec 10 #PHP
PHP读取PPT文件的方法
Dec 10 #PHP
关于WordPress的SEO优化相关的一些PHP页面脚本技巧
Dec 10 #PHP
PHP创建PowerPoint2007文档的方法
Dec 10 #PHP
You might like
非常好的php目录导航文件代码
2006/10/09 PHP
PHP编码转换
2012/11/05 PHP
php生成图片验证码的方法
2016/04/15 PHP
编写兼容IE和FireFox的脚本
2009/05/18 Javascript
Javascript中valueOf与toString区别浅析
2013/03/19 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
原生js ActiveXObject获取execl里面的值
2013/11/01 Javascript
JavaScript中伪协议 javascript:使用探讨
2014/07/18 Javascript
jQuery DOM插入节点操作指南
2015/03/03 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
详解JavaScript正则表达式中的global属性的使用
2015/06/16 Javascript
jQuery对JSON数据进行排序输出的方法
2015/06/24 Javascript
兼容各大浏览器的JavaScript阻止事件冒泡代码
2015/07/09 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
深入浅析javascript中的作用域(推荐)
2016/07/19 Javascript
JavaScript实现瀑布流以及加载效果
2017/02/11 Javascript
解决给dom元素绑定click等事件无效问题的方法
2017/02/17 Javascript
angular.JS实现网页禁用调试、复制和剪切
2017/03/31 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
详解微信小程序开发之formId使用(模板消息)
2019/08/27 Javascript
Vue中用JSON实现刷新界面不影响倒计时
2020/10/26 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
python编码最佳实践之总结
2016/02/14 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
python表格存取的方法
2018/03/07 Python
对python中list的拷贝与numpy的array的拷贝详解
2019/01/29 Python
Python3.4解释器用法简单示例
2019/03/22 Python
python实现ip代理池功能示例
2019/07/05 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
2020/04/19 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
python如何安装下载后的模块
2020/07/03 Python
外贸员简历中的自我评价
2014/03/04 职场文书
食品科学与工程专业毕业生求职信范文
2014/07/21 职场文书
解决pycharm安装scrapy DLL load failed:找不到指定的程序的问题
2021/06/08 Python
Golang jwt身份认证
2022/04/20 Golang