搭建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下通过伪造http头破解防盗链的代码
Jul 03 PHP
Drupal读取Excel并导入数据库实例
Mar 02 PHP
php无限遍历文件夹示例分享
Mar 04 PHP
PHP英文字母大小写转换函数小结
May 03 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
2款PHP无限级分类实例代码
Nov 11 PHP
PHP中类的继承和用法实例分析
May 24 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
PHP+MySQL实现在线测试答题实例
Jan 02 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
十大“创意”战术!
2020/03/04 星际争霸
54个提高PHP程序运行效率的方法
2015/07/19 PHP
laravel ORM关联关系中的 with和whereHas用法
2019/10/16 PHP
捕获关闭窗口的脚本
2009/01/10 Javascript
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
IE下使用jQuery重置iframe地址时内存泄露问题解决办法
2015/02/05 Javascript
JS实现点击按钮自动增加一个单元格的方法
2015/03/09 Javascript
AngularJS基础学习笔记之简单介绍
2015/05/10 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
javascript 中的事件委托详解
2016/10/25 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
详谈js模块化规范
2017/07/07 Javascript
JavaScript编程设计模式之观察者模式(Observer Pattern)实例详解
2017/10/25 Javascript
vue-cli中的babel配置文件.babelrc实例详解
2018/02/22 Javascript
详解vue挂载到dom上会发生什么
2019/01/20 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
2019/01/28 jQuery
JS基于ES6新特性async await进行异步处理操作示例
2019/02/02 Javascript
uniapp电商小程序实现订单30分钟倒计时
2020/11/01 Javascript
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python将文本中的空格替换为换行的方法
2018/03/19 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python面试题之列表声明实例分析
2019/07/08 Python
css3中flex布局宽度不生效的解决
2020/12/09 HTML / CSS
Html5获取高德地图定位天气的方法
2019/12/26 HTML / CSS
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
.NET面试10题
2014/02/24 面试题
工程预算与管理应届生求职信
2013/10/06 职场文书
毕业生教师求职信
2013/10/20 职场文书
大学毕业寄语大全
2014/04/10 职场文书
教师三严三实心得体会
2014/10/11 职场文书
大国崛起英国观后感
2015/06/02 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
会议主持词通用版
2019/04/02 职场文书