搭建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的安全
Oct 09 PHP
PHP产生随机字符串函数
Dec 06 PHP
php 正则 过滤html 的超链接
Jun 02 PHP
用PHP读取和编写XML DOM的实现代码
Feb 03 PHP
从康盛产品(discuz)提取出来的模板类
Jun 28 PHP
php中设置多级目录session的问题
Aug 08 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
PHP中strpos、strstr和stripos、stristr函数分析
Jun 11 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
PHP中递归的实现实例详解
Nov 14 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 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.MVC的模板标签系统(五)
2006/09/05 PHP
php函数之子字符串替换&amp;#65279; str_replace
2011/03/23 PHP
基于php权限分配的实现代码
2013/04/28 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
JavaScript小技巧 2.5 则
2010/09/12 Javascript
解读JavaScript代码 var ie = !-[1,] 最短的IE判定代码
2011/05/28 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
js正则表达式中test,exec,match方法的区别说明
2014/01/29 Javascript
jQuery使用$.get()方法从服务器文件载入数据实例
2015/03/25 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
ReactNative Image组件使用详解
2017/08/07 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
微信小程序实现图片压缩
2019/12/03 Javascript
原生JS实现汇率转换功能代码实例
2020/05/13 Javascript
逐行分析鸿蒙系统的 JavaScript 框架(推荐)
2020/09/17 Javascript
利用Python实现简单的相似图片搜索的教程
2015/04/23 Python
python实现稀疏矩阵示例代码
2017/06/09 Python
解决Matplotlib图表不能在Pycharm中显示的问题
2018/05/24 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
使用Python控制摄像头拍照并发邮件
2019/04/23 Python
python实现的生成word文档功能示例
2019/08/23 Python
经验丰富程序员才知道的8种高级Python技巧
2020/07/27 Python
PyCharm配置anaconda环境的步骤详解
2020/07/31 Python
pandas抽取行列数据的几种方法
2020/12/13 Python
中国好声音广告词
2014/03/18 职场文书
汽车运用工程专业求职信
2014/06/18 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
golang import自定义包方式
2021/04/29 Golang
Redis如何实现验证码发送 以及限制每日发送次数
2022/04/18 Redis