搭建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 daodb插入、更新与删除数据
Mar 19 PHP
php 仿Comsenz安装效果代码打包提供下载
May 09 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
PHP输出英文时间日期的安全方法(RFC 1123格式)
Jun 13 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 PHP
php常用字符函数实例小结
Dec 29 PHP
thinkPHP5.0框架事务处理操作简单示例
Sep 07 PHP
PHP创建文件及写入数据(覆盖写入,追加写入)的方法详解
Feb 15 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP+Ajax实现的无刷新分页功能详解【附demo源码下载】
2017/07/03 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
laravel withCount 统计关联数量的方法
2019/10/10 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
模仿JQuery.extend函数扩展自己对象的js代码
2009/12/09 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
jquery 插件学习(六)
2012/08/06 Javascript
Egret引擎开发指南之视觉编程
2014/09/03 Javascript
JavaScript插件化开发教程(六)
2015/02/01 Javascript
jQuery实现图片文字淡入淡出效果
2015/12/21 Javascript
jquery根据td给相同tr下其他td赋值的实现方法
2016/10/05 Javascript
JS实现旋转木马式图片轮播效果
2017/01/18 Javascript
详解Vuejs2.0之异步跨域请求
2017/04/20 Javascript
关于Vue Webpack2单元测试示例详解
2017/08/14 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
微信小程序基于本地缓存实现点赞功能的方法
2017/12/18 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
Vue 数据响应式相关总结
2021/01/28 Vue.js
Python里隐藏的“禅”
2014/06/16 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
python中sort和sorted排序的实例方法
2019/08/26 Python
Python通过socketserver处理多个链接
2020/03/18 Python
台湾深度自由行旅游平台:Tripbaa趣吧
2017/10/10 全球购物
澳大利亚自然和有机的健康美容产品一站式商店:Ziani Beauty
2017/12/28 全球购物
COSETTE官网:奢华,每天
2020/03/22 全球购物
通信专业个人自我鉴定
2013/10/21 职场文书
应届毕业生个人自荐信范文
2013/11/30 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
《雨霖铃》听课反思
2014/02/13 职场文书
孩子满月酒答谢词
2015/09/30 职场文书