王继业:电子信息吧,电子信息工程大类专业包括光学工程。现在教育部有一个专业标准,就是这么定的。AddTime:2020-06-21 23:46
Q:朱老师,我们这个光信息科学与技术现在属于哪一类专业?那些报考公务员啥的划分专业用。
朱伟利:光学工程,或光电信息与工程专业,你看看有没有?
Q:我看光信息科学与技术被划为电子信息科学类,电子信息相关专业了吧
A:也许吧。
A:我也不太清楚了,原来咱们的专业已经改名了,好像叫光电子信息与工程专业。也许我说的不确切
==============以王老师的为准======================================
公务员考试中光信息科学与技术属于哪一类,有没有比较官方的权威的专业分类。
提问者采纳
天逸教育为您查询了公务员考试专业课设置目录
你的专业属于 理学大门类 电子信息科学类二级类
来自:http://zhidao.baidu.com/link?url=-4UUUjVV7ZZb50ZXYugWAh4CvqnFtN2wrmqbms5ajBHQpMNclwYzmQri_Ifr_h5YRnL9mBTErlnLSxx0QJNWYq
光信息科学与技术在湖北属于哪一类呢? 湖北公务员考试网的回复 你好,光信息科学与技术专业属于电子信息类。
电子信息科学类(如电子信息科学与技术、微电子学、光信息科学与技术等),本人学习光信息的。。。呵呵!
电子信息类 电子信息工程、电子信息、电子工程、通信工程、信息工程、电子科学技术、 电子信息科学与技术、 应用电子技术、微电子学、光信息科学与技术、光电子技术科学、光学工程、信号与信息处理、信息对抗技术、信息显示与光电技术、集成电路设计与集成系统、光电信息工程、电气信息工程、广播电视工程、微电子制造工程、物理电子学、电路与系统、微电子学与固体电子学、电磁场与微波技术、通信与信息系统!!
电子信息科学及技术类:电子信息科学与技术 微电子学 光信息科学与技术
来源网站:
http://www.yuloo.com/news/133770.html
http://www.hnksw.com/official/show/48291.html
DownLoad 划分From重庆:
2013北京公务员:
503 210869101 石景山区质量技术监督稽查队 行政机关 市级机关 石景山区 稽查队 综合执法职位 负责综合执法工作 1 本科 学士 电子信息工程 不限 否 1:5 两年以上(含两年) 否 否 www.bjtsb.gov.cn
1230 820955106 门头沟区安全生产检查执法队 参照公务员法管理单位 区县及以下机关 门头沟区 执法检查员 负责计算机网络维护、信息化平台管理、生产经营单位信息平台监控管理工作 1 本科及以上 取得相应学位 信息管理与信息系统、计算机软件、电子信息科学与技术、计算机科学与技术 不限 全日制高等院校毕业 否 1:3 两年以上(含两年) 否 否 69842130或69868902 http://www.bjmtg.gov.cn/
1232 820955104 门头沟区安全生产检查执法队 参照公务员法管理单位 区县及以下机关 门头沟区 清水镇安全员 负责镇、街安全生产执法检查、执法文书整理及日常工作 1 本科及以上 取得相应学位 经济学、法学、行政管理、电子信息科学与技术、建筑学、公共安全管理 不限 否 1:3 两年以上(含两年) 否 否 69842130或69868902 http://www.bjmtg.gov.cn/ 派驻清水镇安全生产监督员长期住在山里乡镇,经常下乡,适合男性报考
1407 221431501 北京市顺义区民防局 行政机关 区县及以下机关 顺义区 指挥通信科 指挥自动化 负责指挥通信、警报、信息情报工作 1 本科及以上 取得相应学位 计算机科学与技术、电子信息工程 中共党员 否 1:3 两年以上(含两年) 否 否 69432518 http://www.shyld.gov.cn/
2013年上半年北京公务员考试时间为2013年3月2日。
http://www.exam8.com/zige/gongwuyuan/zhaokao/201301/2518948.html
Q:朱老师,我们这个光信息科学与技术现在属于哪一类专业?那些报考公务员啥的划分专业用。
朱伟利:光学工程,或光电信息与工程专业,你看看有没有?
Q:我看光信息科学与技术被划为电子信息科学类,电子信息相关专业了吧
A:也许吧。
A:我也不太清楚了,原来咱们的专业已经改名了,好像叫光电子信息与工程专业。也许我说的不确切
==============以王老师的为准======================================
公务员考试中光信息科学与技术属于哪一类,有没有比较官方的权威的专业分类。
提问者采纳
天逸教育为您查询了公务员考试专业课设置目录
你的专业属于 理学大门类 电子信息科学类二级类
来自:http://zhidao.baidu.com/link?url=-4UUUjVV7ZZb50ZXYugWAh4CvqnFtN2wrmqbms5ajBHQpMNclwYzmQri_Ifr_h5YRnL9mBTErlnLSxx0QJNWYq
光信息科学与技术在湖北属于哪一类呢? 湖北公务员考试网的回复 你好,光信息科学与技术专业属于电子信息类。
电子信息科学类(如电子信息科学与技术、微电子学、光信息科学与技术等),本人学习光信息的。。。呵呵!
电子信息类 电子信息工程、电子信息、电子工程、通信工程、信息工程、电子科学技术、 电子信息科学与技术、 应用电子技术、微电子学、光信息科学与技术、光电子技术科学、光学工程、信号与信息处理、信息对抗技术、信息显示与光电技术、集成电路设计与集成系统、光电信息工程、电气信息工程、广播电视工程、微电子制造工程、物理电子学、电路与系统、微电子学与固体电子学、电磁场与微波技术、通信与信息系统!!
电子信息科学及技术类:电子信息科学与技术 微电子学 光信息科学与技术
来源网站:
http://www.yuloo.com/news/133770.html
http://www.hnksw.com/official/show/48291.html
DownLoad 划分From重庆:
下载文件
2013北京公务员:
503 210869101 石景山区质量技术监督稽查队 行政机关 市级机关 石景山区 稽查队 综合执法职位 负责综合执法工作 1 本科 学士 电子信息工程 不限 否 1:5 两年以上(含两年) 否 否 www.bjtsb.gov.cn
1230 820955106 门头沟区安全生产检查执法队 参照公务员法管理单位 区县及以下机关 门头沟区 执法检查员 负责计算机网络维护、信息化平台管理、生产经营单位信息平台监控管理工作 1 本科及以上 取得相应学位 信息管理与信息系统、计算机软件、电子信息科学与技术、计算机科学与技术 不限 全日制高等院校毕业 否 1:3 两年以上(含两年) 否 否 69842130或69868902 http://www.bjmtg.gov.cn/
1232 820955104 门头沟区安全生产检查执法队 参照公务员法管理单位 区县及以下机关 门头沟区 清水镇安全员 负责镇、街安全生产执法检查、执法文书整理及日常工作 1 本科及以上 取得相应学位 经济学、法学、行政管理、电子信息科学与技术、建筑学、公共安全管理 不限 否 1:3 两年以上(含两年) 否 否 69842130或69868902 http://www.bjmtg.gov.cn/ 派驻清水镇安全生产监督员长期住在山里乡镇,经常下乡,适合男性报考
1407 221431501 北京市顺义区民防局 行政机关 区县及以下机关 顺义区 指挥通信科 指挥自动化 负责指挥通信、警报、信息情报工作 1 本科及以上 取得相应学位 计算机科学与技术、电子信息工程 中共党员 否 1:3 两年以上(含两年) 否 否 69432518 http://www.shyld.gov.cn/
2013年上半年北京公务员考试时间为2013年3月2日。
http://www.exam8.com/zige/gongwuyuan/zhaokao/201301/2518948.html
有三道PHP的面试题,除了第三题需要一些经验和对HTTP协议理解外,前面两题其实很简单,但是很少遇到有人答正确的,大部分人我想都不是技术问题,而是思考是否严谨的问题。
1. 下面语句输出什么?为什么?
if ($a=$b) printf("a==b");
else printf("a!=b");
2. $array['anykey']和$array[anykey]有什么区别?
3. 写出使用telnet命令通过GET的方式访问http://www.toplee.com/index.php 得到页面返回的方法(不是用PHP实现,用dos或者unix命令行实现)。
MyResult:
1.程序把$b赋值给$a,然后判断$a值~~~因为$a=null 所以$a自然为false!
2.这样写的话在警告没有打开的条件 不会出现提示错误的 anykey 只要没有定义成常量 效果一样 (节约了两个单引号) :)
3.貌似这样没有什么好处吧 :) curl更强大
贴上51.com几道题:
1. 禁用COOKIE 后 SEESION 还能用吗?
2. 抓取远程图片到本地,你会用什么函数?
3. 已知姓名A,姓名B,给一个求他们缘份的算法
4. 你觉得在PV10W的时候, 同等配置下,LUNIX 比WIN快多少?
5. 简述POST 和GET传输的最大容量分别是多少?
6. 用最少的代码写一个求3值最大值的函数.
大家可以试一下哦.
阅读全文
1. 下面语句输出什么?为什么?
if ($a=$b) printf("a==b");
else printf("a!=b");
2. $array['anykey']和$array[anykey]有什么区别?
3. 写出使用telnet命令通过GET的方式访问http://www.toplee.com/index.php 得到页面返回的方法(不是用PHP实现,用dos或者unix命令行实现)。
MyResult:
1.程序把$b赋值给$a,然后判断$a值~~~因为$a=null 所以$a自然为false!
2.这样写的话在警告没有打开的条件 不会出现提示错误的 anykey 只要没有定义成常量 效果一样 (节约了两个单引号) :)
3.貌似这样没有什么好处吧 :) curl更强大
贴上51.com几道题:
1. 禁用COOKIE 后 SEESION 还能用吗?
2. 抓取远程图片到本地,你会用什么函数?
3. 已知姓名A,姓名B,给一个求他们缘份的算法
4. 你觉得在PV10W的时候, 同等配置下,LUNIX 比WIN快多少?
5. 简述POST 和GET传输的最大容量分别是多少?
6. 用最少的代码写一个求3值最大值的函数.
大家可以试一下哦.
我来做个标准:
1. 禁用COOKIE 后 SEESION 还能用吗?
能用,页面get mode提交session.
2. 抓取远程图片到本地,你会用什么函数?
我会用curl
3. 已知姓名A,姓名B,给一个求他们缘份的算法
ascii (最好简单为好)
4. 你觉得在PV10W的时候, 同等配置下,LUNIX 比WIN快多少?
百分之二十以上
5. 简述POST 和GET传输的最大容量分别是多少?
无限 和 1024
6. 用最少的代码写一个求3值最大值的函数.
max()
1. 禁用COOKIE 后 SEESION 还能用吗?
能用,页面get mode提交session.
2. 抓取远程图片到本地,你会用什么函数?
我会用curl
3. 已知姓名A,姓名B,给一个求他们缘份的算法
ascii (最好简单为好)
4. 你觉得在PV10W的时候, 同等配置下,LUNIX 比WIN快多少?
百分之二十以上
5. 简述POST 和GET传输的最大容量分别是多少?
无限 和 1024
6. 用最少的代码写一个求3值最大值的函数.
max()
阅读全文
[转载]去年在巴黎举行的PHP开发者大会中,PHP6开发的消息开始流传开来,
于PHP大会讨论的PHP6,将有很大幅度的变化,但这只是草案阶段,
并不代表所有会议的机率都会随着PHP6的发布而包含记录中所有的变更
也就是说,在发布PHP6之前,还是会有异动的情形,但是可以确定的是
下面所列的数项变化,将会随着PHP6一同面世(当然不是百分百乐,)
赶快来看看这些新特性吧
1.支持Unicode
支持Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来
的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来
越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的。另外
一点,PHP也可以在.ini文件中设定是否开启支持Unicode,决定权在你自己,
这是一个不错的点子,关掉Unicode的支持,PHP的性能并不会有大幅度的
提升,主要的影响在于需要引用字符串的函数。
2.Register Globals 将被移除
这是一个重要的决定,说多新进的PHP开发者会觉得Register Globals满
方便的,但是却忽略了Register Globals会带来程序上安全性的隐患,大
多数的主机上此项功能是关闭的,印象中从PHP4.3.x版开始时,此项默认
设置值即是关闭状态,PHP6正式移除Register Globals也代表着如果程序
是由PHP3时代的产物,将完全无法使用,除了改写一途外,别无他法。相
信现在的PHP世界里,仍使用PHP3时代所产生的程序应该是少之又少。
3.Magic Quotes 将消失
Magic Quotes主要是自动转义需要转义的字符,此项功能移除叶符合大多
数PHP开发者的心声。
4.Safe Mode 取消
老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到
5.’var’ 别名为 ‘public’
在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,
PHP6现在也可以称作为OO语言了。
6.通过引用返回将出错
现在透过引用返回编译器将会报错 例如$a =& new b()、function &c(),
OO语言默认就是引用,所以不需要再使用&了。
7.zend.ze1 compatbility mode 将被移去
Zend.ze1相容模式将被移去,PHP5是为兼容旧有PHP4,所以在.ini中可选择是否
开启相容模式,原因在于PHP5使用的是第二代解析引擎,但是相容模式并不是百
分之百能解析PHP4语法,所以旧时代的产物,移除。
8.Freetype 1 and GD 1 support 将不见
这两个是很久的Libs,所以不再支持,GD1早已被现在的GD2取代了。
9.dl() 被移到 SAPI 中
dl()主要是让设计师加载extension Libs,现在被移到 SAPI 中
10.Register Long Array 去除
从PHP5起默认是关闭,再PHP6中正式移除。
11.一些Extension的变更
例如 XMLReader 和 XMLWriter 将不再是以Extension的方式出现,他们将被移入
到PHP的核心之中,并且默认是开启,ereg extension将被放入PECL,代表着它将
被移出PHP核心,这也是为了让路给新的正则表达式extension,
此外,Fileinfo extension 也将被导入PHP的核心之中。
12.APC将被导入核心
这是一个提高PHP性能的功能,现在它将被放入PHP核心中,并且可以选择是否启用APC
13.告别ASP风格的起始标签
原来是为了取悦ASP开发者转向使用PHP,现今已经不再需要这种做法了,
最后,别期望PHP6的性能可以全面超过PHP5,有可能的是PHP6的执行效率会比
PHP5还要来的慢的,但是可以预期的是,PHP开发小组将会努力的完善PHP5,超
越PHP5。
那么,对PHP6有兴趣的朋友现在可以到PHP官方网站上下载,试试这些功能是否真的已经
在PHP6中体现出来了,下载地址http://snaps.php.net/
于PHP大会讨论的PHP6,将有很大幅度的变化,但这只是草案阶段,
并不代表所有会议的机率都会随着PHP6的发布而包含记录中所有的变更
也就是说,在发布PHP6之前,还是会有异动的情形,但是可以确定的是
下面所列的数项变化,将会随着PHP6一同面世(当然不是百分百乐,)
赶快来看看这些新特性吧
1.支持Unicode
支持Unicode是有其必然,虽然Unicode占用较多的空间,但Unicode带来
的便利性,远超过占用空间的缺点,尤其在国际化的今天,硬件设备越来
越强大,网速也大幅度的提升,这么一点小小的缺点是可以忽略的。另外
一点,PHP也可以在.ini文件中设定是否开启支持Unicode,决定权在你自己,
这是一个不错的点子,关掉Unicode的支持,PHP的性能并不会有大幅度的
提升,主要的影响在于需要引用字符串的函数。
2.Register Globals 将被移除
这是一个重要的决定,说多新进的PHP开发者会觉得Register Globals满
方便的,但是却忽略了Register Globals会带来程序上安全性的隐患,大
多数的主机上此项功能是关闭的,印象中从PHP4.3.x版开始时,此项默认
设置值即是关闭状态,PHP6正式移除Register Globals也代表着如果程序
是由PHP3时代的产物,将完全无法使用,除了改写一途外,别无他法。相
信现在的PHP世界里,仍使用PHP3时代所产生的程序应该是少之又少。
3.Magic Quotes 将消失
Magic Quotes主要是自动转义需要转义的字符,此项功能移除叶符合大多
数PHP开发者的心声。
4.Safe Mode 取消
老实说,这个模式不知道哪里不好,取消就取消吧,反正也用不到
5.’var’ 别名为 ‘public’
在类中的var声明变成public的别名,相信是为了兼容PHP5而作的决定,
PHP6现在也可以称作为OO语言了。
6.通过引用返回将出错
现在透过引用返回编译器将会报错 例如$a =& new b()、function &c(),
OO语言默认就是引用,所以不需要再使用&了。
7.zend.ze1 compatbility mode 将被移去
Zend.ze1相容模式将被移去,PHP5是为兼容旧有PHP4,所以在.ini中可选择是否
开启相容模式,原因在于PHP5使用的是第二代解析引擎,但是相容模式并不是百
分之百能解析PHP4语法,所以旧时代的产物,移除。
8.Freetype 1 and GD 1 support 将不见
这两个是很久的Libs,所以不再支持,GD1早已被现在的GD2取代了。
9.dl() 被移到 SAPI 中
dl()主要是让设计师加载extension Libs,现在被移到 SAPI 中
10.Register Long Array 去除
从PHP5起默认是关闭,再PHP6中正式移除。
11.一些Extension的变更
例如 XMLReader 和 XMLWriter 将不再是以Extension的方式出现,他们将被移入
到PHP的核心之中,并且默认是开启,ereg extension将被放入PECL,代表着它将
被移出PHP核心,这也是为了让路给新的正则表达式extension,
此外,Fileinfo extension 也将被导入PHP的核心之中。
12.APC将被导入核心
这是一个提高PHP性能的功能,现在它将被放入PHP核心中,并且可以选择是否启用APC
13.告别ASP风格的起始标签
原来是为了取悦ASP开发者转向使用PHP,现今已经不再需要这种做法了,
最后,别期望PHP6的性能可以全面超过PHP5,有可能的是PHP6的执行效率会比
PHP5还要来的慢的,但是可以预期的是,PHP开发小组将会努力的完善PHP5,超
越PHP5。
那么,对PHP6有兴趣的朋友现在可以到PHP官方网站上下载,试试这些功能是否真的已经
在PHP6中体现出来了,下载地址http://snaps.php.net/
Crontab跑昨天的DB时间:
$date = date('Y-m-d',strtotime("-1 day"));//昨天
$date = date('Ymd',strtotime("-1 day"));
结果:
2011-03-15
20110315
Oct-23-2009 09:21:00
计算秒数(60 秒):
反过来,由Y-m-d H:i:s变为unix时间秒:
1)Mysql:
UNIX_TIMESTAMP(etime) > UNIX_TIMESTAMP())
http://www.cnblogs.com/showker/archive/2010/03/18/1689054.html
2)PHP:
用strtotime(格式)可以获取指定时间的时间戳
$date = date('Y-m-d',strtotime("-1 day"));//昨天
$date = date('Ymd',strtotime("-1 day"));
结果:
2011-03-15
20110315
$fromDate1=mktime(9,21,0,10,23,2009);//开始时间 ---> 时,分,秒 月,日,年
echo date("M-d-Y H:i:s",$fromDate1);
echo date("M-d-Y H:i:s",$fromDate1);
Oct-23-2009 09:21:00
$date_d=date("d")-1;//天数减一天,数字想减少罢了。
$starttime = date("Y-m-d 00:00:00", strtotime("-3 day"));//天数减少3天,蕴含日期相见月份相减少。 date("Y-m-d H:i:s")
$lastread = time()-3*24*60*60;//减少是秒数,看下文sql构造:)
echo date("Y-m-d H:i:s",$lastread);
$starttime = date("Y-m-d 00:00:00", strtotime("-3 day"));//天数减少3天,蕴含日期相见月份相减少。 date("Y-m-d H:i:s")
$lastread = time()-3*24*60*60;//减少是秒数,看下文sql构造:)
echo date("Y-m-d H:i:s",$lastread);
计算秒数(60 秒):
$date_time = time();
$date_time2 = time();
$date_time2-$date_time >= 60 //60秒
$date_time2 = time();
$date_time2-$date_time >= 60 //60秒
反过来,由Y-m-d H:i:s变为unix时间秒:
1)Mysql:
UNIX_TIMESTAMP(etime) > UNIX_TIMESTAMP())
http://www.cnblogs.com/showker/archive/2010/03/18/1689054.html
2)PHP:
用strtotime(格式)可以获取指定时间的时间戳
<?php
require_once ("/data0/vshare/app/rank/config.php");
define("USER_SEARCH_IASK_LOG_PATH", "/data0/vshare/logs/user_search/iasks/");//删除的用户及视频日志目录(爱问)
echo "程序于 " . date("Y-m-d H:i:s") . " 开始执行:\n";
$date_d=date("d")-1;
if($date_d<10)
{
$date_d="0".$date_d;
}
$iask_filename = USER_SEARCH_IASK_LOG_PATH.date("Ym")."/".$date_d."/boke_ay_" . date("Ymd", strtotime("-1 day")) .".log";
$iask_filename_html = USER_SEARCH_IASK_LOG_PATH.date("Ym")."/".$date_d."/boke_ay_" . date("Ymd", strtotime("-1 day")) .".html";
$conn_db_3306_r = @mysql_connect(DBHOST_VIDEO_R_aoyun, DBUSER_VIDEO_R_aoyun, DBPASSWD_VIDEO_R_aoyun) or
die(DBHOST_VIDEO_R_aoyun.DBUSER_VIDEO_R_aoyun.DBPASSWD_VIDEO_R_aoyun."Can't connect to 3306 port readonly database");//长连接
//统计昨天登录过的用户个人中心信息
echo "正在从MySQL数据库中取出所有的用户userid,请稍候....";
//exit(0);
//$select_dt_user_r = @mysql_select_db("dt_video", $conn_db_3306_r) or die("Can't select database");
$select_dt_user_r = @mysql_select_db("dt_manage", $conn_db_3306_r) or die("Can't select database");
//$sql_tb_usertotal_r = "SELECT videoid,up_userid FROM tb_video_total where activeid = 0 limit 10";/*上线后打开*/
$starttime = date("Y-m-d 00:00:00", strtotime("-3 day"));
$endtime = date("Y-m-d 00:00:00");
$sql_tb_usertotal_r = "select videoid,up_userid from tb_video_activity where (adddate>'".$starttime."' or appr_time>'".$starttime."') and adddate<'".$endtime."' and appr_status=1 and active_status in(1,0) and conv_status=1 and del_status=0 and activeid=128;";/*上线后打开*/
$query_tb_usertotal_r = mysql_query($sql_tb_usertotal_r, $conn_db_3306_r) or die("Query Error:" .
mysql_error() . "\n");
echo $sql_tb_usertotal_r."\n";
echo "\n[取出所有的用户userid:完成]\n";
$i=0;
echo $iask_filename."\n";
if(file_exists($iask_filename))
{
unlink($iask_filename);
}
while ($row_tb_usertotal_r = mysql_fetch_assoc($query_tb_usertotal_r))
{
if (!($i % 2000))
{
sleep(1);
}
$vid = $row_tb_usertotal_r['videoid'];
$uid = $row_tb_usertotal_r['up_userid'];
$result['vid'] = $vid;
$result['uid'] = $uid;
/*
echo "VID:". $result['vid'] = $vid."\n";
echo "UID:".$result['uid'] = $uid."\n";
*/
$content = getContent($result,$i);
us_writeFile($content, $iask_filename, USER_SEARCH_IASK_LOG_PATH .date("Ym")."/".$date_d);
$i=$i+1;
}
if (file_exists($iask_filename) && is_readable($iask_filename))
{
echo "正在向爱问推送数据,请稍候....\n";
//pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && /usr/bin/rsync -vzrtup {$iask_filename} 10.69.2.48::usersource_video/",
//"r"));
$command="/usr/bin/rsync -avgt --progress --password-file=/usr/local/etc/rsyncd.secrets " . USER_SEARCH_IASK_LOG_PATH ."*"." backupuser@219.142.118.48::boke_2008_sum_olympic_video";
echo $command."\n";
pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
"r"));
$command="/usr/bin/rsync -avgt --progress --password-file=/usr/local/etc/rsyncd.secrets " . USER_SEARCH_IASK_LOG_PATH ."*"." backupuser@172.16.153.70::olympic_video/";
pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
"r"));
$command="/usr/bin/rsync -avu " . $iask_filename ." 172.16.6.198::vblog/";
pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
"r"));
$command="cp {$iask_filename} {$iask_filename_html}";
pclose(popen($command, "r"));
$command="/usr/bin/rsync -avu {$iask_filename_html} {$iask_filename} 10.68.1.30::v_blog_sina_com_cn/htdocs/ay_data/";
pclose(popen($command, "r"));
$command="/usr/bin/rsync -avu {$iask_filename_html} {$iask_filename} 10.68.1.71::v_blog_sina_com_cn/htdocs/ay_data/";
pclose(popen($command, "r"));
echo "[推送完成]\n";
}
echo "\n[完成]\n";
echo "程序于 " . date("Y-m-d H:i:s") . " 执行结束。\n\n";
function us_path_validate($path)
{
$arraypath = split("\/+", $path);
$tmppath = "";
for ($i = 0; $i < count($arraypath); $i++)
{
if ("" == $arraypath[$i])
continue;
$tmppath .= (0 == $i ? "":"/") . $arraypath[$i];
if (!is_dir($tmppath))
{
if (!mkdir($tmppath, 0777))
{
return false;
}
}
}
return true;
}
function us_writeFile($content, $filename, $dirpath)
{
if (!us_path_validate($dirpath))
exit();
$fp = fopen($filename, "a+");
if (!@fwrite($fp, $content . "\n"))
{
@fclose($fp);
return false;
}
fclose($fp);
return true;
}
function getContent($result,$i)
{
/*
if($i==0)
{
$str = "VID\tUID\t日期\n";
$str .= $result['vid'] . "\t";//视频总量
$str .= $result['uid'] . "\t";//userid,用户UID
$str .= date("Y-m-d",strtotime("-1 day")). "";
return $str;
}else{
*/
$str = $result['vid'] . "\t";//视频总量
$str .= $result['uid'] . "\t";//userid,用户UID
$str .= date("Y-m-d",strtotime("-1 day")) . "";
return $str;
// }
}
?>
require_once ("/data0/vshare/app/rank/config.php");
define("USER_SEARCH_IASK_LOG_PATH", "/data0/vshare/logs/user_search/iasks/");//删除的用户及视频日志目录(爱问)
echo "程序于 " . date("Y-m-d H:i:s") . " 开始执行:\n";
$date_d=date("d")-1;
if($date_d<10)
{
$date_d="0".$date_d;
}
$iask_filename = USER_SEARCH_IASK_LOG_PATH.date("Ym")."/".$date_d."/boke_ay_" . date("Ymd", strtotime("-1 day")) .".log";
$iask_filename_html = USER_SEARCH_IASK_LOG_PATH.date("Ym")."/".$date_d."/boke_ay_" . date("Ymd", strtotime("-1 day")) .".html";
$conn_db_3306_r = @mysql_connect(DBHOST_VIDEO_R_aoyun, DBUSER_VIDEO_R_aoyun, DBPASSWD_VIDEO_R_aoyun) or
die(DBHOST_VIDEO_R_aoyun.DBUSER_VIDEO_R_aoyun.DBPASSWD_VIDEO_R_aoyun."Can't connect to 3306 port readonly database");//长连接
//统计昨天登录过的用户个人中心信息
echo "正在从MySQL数据库中取出所有的用户userid,请稍候....";
//exit(0);
//$select_dt_user_r = @mysql_select_db("dt_video", $conn_db_3306_r) or die("Can't select database");
$select_dt_user_r = @mysql_select_db("dt_manage", $conn_db_3306_r) or die("Can't select database");
//$sql_tb_usertotal_r = "SELECT videoid,up_userid FROM tb_video_total where activeid = 0 limit 10";/*上线后打开*/
$starttime = date("Y-m-d 00:00:00", strtotime("-3 day"));
$endtime = date("Y-m-d 00:00:00");
$sql_tb_usertotal_r = "select videoid,up_userid from tb_video_activity where (adddate>'".$starttime."' or appr_time>'".$starttime."') and adddate<'".$endtime."' and appr_status=1 and active_status in(1,0) and conv_status=1 and del_status=0 and activeid=128;";/*上线后打开*/
$query_tb_usertotal_r = mysql_query($sql_tb_usertotal_r, $conn_db_3306_r) or die("Query Error:" .
mysql_error() . "\n");
echo $sql_tb_usertotal_r."\n";
echo "\n[取出所有的用户userid:完成]\n";
$i=0;
echo $iask_filename."\n";
if(file_exists($iask_filename))
{
unlink($iask_filename);
}
while ($row_tb_usertotal_r = mysql_fetch_assoc($query_tb_usertotal_r))
{
if (!($i % 2000))
{
sleep(1);
}
$vid = $row_tb_usertotal_r['videoid'];
$uid = $row_tb_usertotal_r['up_userid'];
$result['vid'] = $vid;
$result['uid'] = $uid;
/*
echo "VID:". $result['vid'] = $vid."\n";
echo "UID:".$result['uid'] = $uid."\n";
*/
$content = getContent($result,$i);
us_writeFile($content, $iask_filename, USER_SEARCH_IASK_LOG_PATH .date("Ym")."/".$date_d);
$i=$i+1;
}
if (file_exists($iask_filename) && is_readable($iask_filename))
{
echo "正在向爱问推送数据,请稍候....\n";
//pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && /usr/bin/rsync -vzrtup {$iask_filename} 10.69.2.48::usersource_video/",
//"r"));
$command="/usr/bin/rsync -avgt --progress --password-file=/usr/local/etc/rsyncd.secrets " . USER_SEARCH_IASK_LOG_PATH ."*"." backupuser@219.142.118.48::boke_2008_sum_olympic_video";
echo $command."\n";
pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
"r"));
$command="/usr/bin/rsync -avgt --progress --password-file=/usr/local/etc/rsyncd.secrets " . USER_SEARCH_IASK_LOG_PATH ."*"." backupuser@172.16.153.70::olympic_video/";
pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
"r"));
$command="/usr/bin/rsync -avu " . $iask_filename ." 172.16.6.198::vblog/";
pclose(popen("touch {$iask_filename} && chmod 0664 {$iask_filename} && $command",
"r"));
$command="cp {$iask_filename} {$iask_filename_html}";
pclose(popen($command, "r"));
$command="/usr/bin/rsync -avu {$iask_filename_html} {$iask_filename} 10.68.1.30::v_blog_sina_com_cn/htdocs/ay_data/";
pclose(popen($command, "r"));
$command="/usr/bin/rsync -avu {$iask_filename_html} {$iask_filename} 10.68.1.71::v_blog_sina_com_cn/htdocs/ay_data/";
pclose(popen($command, "r"));
echo "[推送完成]\n";
}
echo "\n[完成]\n";
echo "程序于 " . date("Y-m-d H:i:s") . " 执行结束。\n\n";
function us_path_validate($path)
{
$arraypath = split("\/+", $path);
$tmppath = "";
for ($i = 0; $i < count($arraypath); $i++)
{
if ("" == $arraypath[$i])
continue;
$tmppath .= (0 == $i ? "":"/") . $arraypath[$i];
if (!is_dir($tmppath))
{
if (!mkdir($tmppath, 0777))
{
return false;
}
}
}
return true;
}
function us_writeFile($content, $filename, $dirpath)
{
if (!us_path_validate($dirpath))
exit();
$fp = fopen($filename, "a+");
if (!@fwrite($fp, $content . "\n"))
{
@fclose($fp);
return false;
}
fclose($fp);
return true;
}
function getContent($result,$i)
{
/*
if($i==0)
{
$str = "VID\tUID\t日期\n";
$str .= $result['vid'] . "\t";//视频总量
$str .= $result['uid'] . "\t";//userid,用户UID
$str .= date("Y-m-d",strtotime("-1 day")). "";
return $str;
}else{
*/
$str = $result['vid'] . "\t";//视频总量
$str .= $result['uid'] . "\t";//userid,用户UID
$str .= date("Y-m-d",strtotime("-1 day")) . "";
return $str;
// }
}
?>
function GetUnreadNum($uid)
{
$cache = $this->_connectCache();
$num = $cache->get(CACHE_SYSLOG."_new_".$uid);
if($num===false)
{
$lastread = $cache->get(CACHE_SYSLOG."_read_".$uid);
if($lastread===false) $lastread = time()-3*24*60*60;
$db = $this->_connectDb(0);
$sql = "select count(*) from syslog where uid='$uid' and time>FROM_UNIXTIME($lastread)";
$st = $db->query($sql);
$num = $st->fetchColumn()+0;
$cache->set(CACHE_SYSLOG."_new_".$uid,$num);
}
return $num;
}
{
$cache = $this->_connectCache();
$num = $cache->get(CACHE_SYSLOG."_new_".$uid);
if($num===false)
{
$lastread = $cache->get(CACHE_SYSLOG."_read_".$uid);
if($lastread===false) $lastread = time()-3*24*60*60;
$db = $this->_connectDb(0);
$sql = "select count(*) from syslog where uid='$uid' and time>FROM_UNIXTIME($lastread)";
$st = $db->query($sql);
$num = $st->fetchColumn()+0;
$cache->set(CACHE_SYSLOG."_new_".$uid,$num);
}
return $num;
}
MySQL客户端显示汉字乱码的解决
MySQL 服务端不加任何参数启动时,客户端可以默认正常显示汉字,如下面所示
PHP code:
D:mysql5>.binmysqld-max-nt.exe --console
061106 20:35:21 InnoDB: Started; log sequence number 0 43655
061106 20:35:22 [Note] .binmysqld-max-nt.exe: ready for connections.
Version: '5.0.18-nt-max' socket: '' port: 3306 MySQL Community Edition (GPL)
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:Documents and SettingsAdministrator>cd d:mysql5bin
C:Documents and SettingsAdministrator>d:
D:mysql5bin>mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 5.0.18-nt-max
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use test
Database changed
mysql> SHOW VARIABLES LIKE 'character_set%';阅读全文
MySQL 服务端不加任何参数启动时,客户端可以默认正常显示汉字,如下面所示
PHP code:
D:mysql5>.binmysqld-max-nt.exe --console
061106 20:35:21 InnoDB: Started; log sequence number 0 43655
061106 20:35:22 [Note] .binmysqld-max-nt.exe: ready for connections.
Version: '5.0.18-nt-max' socket: '' port: 3306 MySQL Community Edition (GPL)
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.
C:Documents and SettingsAdministrator>cd d:mysql5bin
C:Documents and SettingsAdministrator>d:
D:mysql5bin>mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 1 to server version: 5.0.18-nt-max
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> use test
Database changed
mysql> SHOW VARIABLES LIKE 'character_set%';阅读全文
var_dump(get_class_methods(get_class($this->helloworld)));
// 设定update()方法的期望值为只被以字符串“something”为参数调用多次。
$observer->expects($this->any())
->method('update')
->with($this->equalTo('foo'))
->will($this->returnValue('foos'));
$tmp = get_class($observer);
var_dump(get_class_methods($tmp));
// 设定update()方法的期望值为只被以字符串“something”为参数调用多次。
$observer->expects($this->any())
->method('update')
->with($this->equalTo('foo'))
->will($this->returnValue('foos'));
$tmp = get_class($observer);
var_dump(get_class_methods($tmp));
加密日志
由于在我们代码开发中,网网接口调用平凡,但是现实资源往往也不足,为此,在我们的测试过程中也出现了困难,一方面是时间的对等,另一方面来自于开发进度和先关准备资源的不充分,为此,phpunit库早已为我们准备好了,getMock函数来跳过或者模拟一些接口方法:
以下假设update函数是掉外网的一个接口,但是这个时候,外网的接口还没有写好,我们怎么办才好呢?那就getMock吧!
helloworld.php
自动生成helloworldTest.php
<?php
require_once 'helloworld.php';
require_once 'PHPUnit/Framework/TestCase.php';
/**
* helloworld test case.
*/
class helloworldTest extends PHPUnit_Framework_TestCase {
/**
* @var helloworld
*/
private $helloworld;
/**
* Prepares the environment before running a test.
*/
protected function setUp() {
parent::setUp ();
// TODO Auto-generated helloworldTest::setUp()
$this->helloworld = new helloworld(/* parameters */);
}
/**
* Cleans up the environment after running a test.
*/
protected function tearDown() {
// TODO Auto-generated helloworldTest::tearDown()
$this->helloworld = null;
parent::tearDown ();
}
/**
* Constructs the test case.
*/
public function __construct() {
// TODO Auto-generated constructor
}
/**
* Tests helloworld->helloworld()
*/
public function testHelloworld() {
// TODO Auto-generated helloworldTest->testHelloworld()
//$this->markTestIncomplete ( "helloworld test not implemented" );
//$this->helloworld->helloworld(/* parameters */);
$this->assertTrue($this->helloworld->update('foo')=='foo'); ////假如接口真实存在直接可以调用,来什么返回什么
$this->assertFalse($this->helloworld->update('foo')=='foos');
//以下开始构造虚拟接口class helloworld function update('foo') return foos;
$observer = $this->getMock('helloworld', array('update'));
// 设定update()方法的期望值为只被以字符串“something”为参数调用一次。
$observer->expects($this->any())
->method('update')
->with($this->equalTo('foo'))
->will($this->returnValue('foos'));
// 创建一个Subject对象并附上模拟的Observer对象。
$this->assertTrue($observer->update('foo')=='foos');//虚拟接口变为:输入foo返回foos了
$result = $observer->update('foo');//虚拟接口变为:输入foo返回foos了
$this->assertTrue($this->helloworld->update_next_do($result)=="foos");//其余真实方法去调用(虚拟接口)以达到预期结果
}
}
注意:在里面多次执行了getMock模拟函数update(),我们用了any(),如果我们用once()的话,在调用第二次这个虚拟函数肯定会出错,因为once()限定了,相关匹配如下:
表 11.1. 匹配器
匹配器 含义
PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount any() 返回一个匹配器,当它评估的方法被执行0或多次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount never() 返回一个匹配器,当它评估的方法被从未被执行时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce atLeastOnce() 返回一个匹配器,当它评估的方法被至少执行一次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount once() 返回一个匹配器,当它评估的方法恰好被执行一次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount exactly(int $count) 返回一个匹配器,当它评估的方法正好被执行$count次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex at(int $index) 返回一个匹配器,当它评估的方法在特定的$index上被调用时匹配。
关于:
->with($this->equalTo('foo'))
->will($this->returnValue('foos'));
你要是传入多个变量的参数如(这样传):
->with($this->equalTo('foo'),$this->equalTo('foo2'),$this->equalTo(array("one","two","three")))
->will($this->returnValue(array("one return array","two return array","three return array")));
这儿的with参数和will关系:
只有传入with的几个对应的参数,方能得到will的结果,但是你要是有引用什么的函数需要Mock的话:
为此:在需要通过mock的函数,请不要写为引用的格式,通过return 返回即可。
但你会说,要是有错误怎么办?
我建议通过php5的try catch 来实现,定义错误编号来解决这个问题,Tks.转帖请注明来自向东的博客:www.xiangdong.org/blog
rewrite:xiangdong2
2009-4-13
以下假设update函数是掉外网的一个接口,但是这个时候,外网的接口还没有写好,我们怎么办才好呢?那就getMock吧!
helloworld.php
<?php
class helloworld
{
public function helloworld()
{
echo "hello the world!";
}
public function update($arra)
{
return $arra;
}
public function update_next_do($arra)
{
if($this->update($arra)=='foos')
{
return foos;
}else{
return false;
}
}
}
?>
class helloworld
{
public function helloworld()
{
echo "hello the world!";
}
public function update($arra)
{
return $arra;
}
public function update_next_do($arra)
{
if($this->update($arra)=='foos')
{
return foos;
}else{
return false;
}
}
}
?>
自动生成helloworldTest.php
<?php
require_once 'helloworld.php';
require_once 'PHPUnit/Framework/TestCase.php';
/**
* helloworld test case.
*/
class helloworldTest extends PHPUnit_Framework_TestCase {
/**
* @var helloworld
*/
private $helloworld;
/**
* Prepares the environment before running a test.
*/
protected function setUp() {
parent::setUp ();
// TODO Auto-generated helloworldTest::setUp()
$this->helloworld = new helloworld(/* parameters */);
}
/**
* Cleans up the environment after running a test.
*/
protected function tearDown() {
// TODO Auto-generated helloworldTest::tearDown()
$this->helloworld = null;
parent::tearDown ();
}
/**
* Constructs the test case.
*/
public function __construct() {
// TODO Auto-generated constructor
}
/**
* Tests helloworld->helloworld()
*/
public function testHelloworld() {
// TODO Auto-generated helloworldTest->testHelloworld()
//$this->markTestIncomplete ( "helloworld test not implemented" );
//$this->helloworld->helloworld(/* parameters */);
$this->assertTrue($this->helloworld->update('foo')=='foo'); ////假如接口真实存在直接可以调用,来什么返回什么
$this->assertFalse($this->helloworld->update('foo')=='foos');
//以下开始构造虚拟接口class helloworld function update('foo') return foos;
$observer = $this->getMock('helloworld', array('update'));
// 设定update()方法的期望值为只被以字符串“something”为参数调用一次。
$observer->expects($this->any())
->method('update')
->with($this->equalTo('foo'))
->will($this->returnValue('foos'));
// 创建一个Subject对象并附上模拟的Observer对象。
$this->assertTrue($observer->update('foo')=='foos');//虚拟接口变为:输入foo返回foos了
$result = $observer->update('foo');//虚拟接口变为:输入foo返回foos了
$this->assertTrue($this->helloworld->update_next_do($result)=="foos");//其余真实方法去调用(虚拟接口)以达到预期结果
}
}
注意:在里面多次执行了getMock模拟函数update(),我们用了any(),如果我们用once()的话,在调用第二次这个虚拟函数肯定会出错,因为once()限定了,相关匹配如下:
表 11.1. 匹配器
匹配器 含义
PHPUnit_Framework_MockObject_Matcher_AnyInvokedCount any() 返回一个匹配器,当它评估的方法被执行0或多次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount never() 返回一个匹配器,当它评估的方法被从未被执行时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedAtLeastOnce atLeastOnce() 返回一个匹配器,当它评估的方法被至少执行一次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount once() 返回一个匹配器,当它评估的方法恰好被执行一次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedCount exactly(int $count) 返回一个匹配器,当它评估的方法正好被执行$count次时匹配。
PHPUnit_Framework_MockObject_Matcher_InvokedAtIndex at(int $index) 返回一个匹配器,当它评估的方法在特定的$index上被调用时匹配。
关于:
->with($this->equalTo('foo'))
->will($this->returnValue('foos'));
你要是传入多个变量的参数如(这样传):
->with($this->equalTo('foo'),$this->equalTo('foo2'),$this->equalTo(array("one","two","three")))
->will($this->returnValue(array("one return array","two return array","three return array")));
这儿的with参数和will关系:
只有传入with的几个对应的参数,方能得到will的结果,但是你要是有引用什么的函数需要Mock的话:
$friendObj = new Friend();
$friendObj->getList($fuids,$uid,0,1,1000);
var_dump($fuids); //你mock它,但是你传入的$fuids(假如一个数组),运行这儿是得不到的,注意啊!
if(empty($fuids['uids']))
{
return 0;
}
$friendObj->getList($fuids,$uid,0,1,1000);
var_dump($fuids); //你mock它,但是你传入的$fuids(假如一个数组),运行这儿是得不到的,注意啊!
if(empty($fuids['uids']))
{
return 0;
}
为此:在需要通过mock的函数,请不要写为引用的格式,通过return 返回即可。
但你会说,要是有错误怎么办?
我建议通过php5的try catch 来实现,定义错误编号来解决这个问题,Tks.转帖请注明来自向东的博客:www.xiangdong.org/blog
rewrite:xiangdong2
2009-4-13
vim的配置文件在哪里
当我们使用Vim时, 你需要知道一系列的配置文件. 这些配置文件的位置依赖于Vim的安装位置和你所使用的操作系统.
通常, 有三个配置文件, 你是必须知道在哪里能找到的.
vimrc
这是Vim最主要的配置文件. 它有两个版本, 全局版本(global)和用户版本(personal)).
全局vimrc文件放在你安装Vim的目录中. 你可以打开vim, 在普通模式下输入下面的命令来找出这个目录的位置
:echo $VIM
结果应该是这样的:
Linux: /usr/share/vim/vimrc
Windows: c:\program files\vim\vimrc
用户版本的vimrc文件放在你的主目录下. 主目录的位置依赖于你的操作系统. Vim最初是为Unix及类Unix操作系统提供的, 所以用户版本的vimrc文件都是通过在文件名的最前面加一个点来设置成隐藏文件. 这是在类Unix上设置隐藏文件的方法, 但不适用于Microsoft Windows. 所以呢, vimrc文件与操作系统有关. 应该是这样的:
Linux: /home/kim/.vimrc
Windows: c:\documents and settings\kim\_vimrc
不管怎么改用户版的vimrc文件, 其中的设置内容都是覆盖在全局vimrc文件中设置的内容. 这就意味着你可以不需要去改变全局vimrc文件来进行配置Vim.
你可以在Vim的普通模式下输入下面的命令, 来找出Vim认为的你的系统的主目录的位置:
:echo $HOME
vimrc文件包含的是ex (vi的前身) 命令, 一条命令一行. 并且vimrc文件也是增加Vim配置信息的默认方式.
你的vimrc可以将其他的文件 (包含着配置信息) 作为外部资源. 在vimrc文件里, 你可用以source命令来实现:
source /path/to/external/file
这样可以使你的vimrc文件保持整洁, 并且你的设置会更加的结构 (更多的关于如何保持vimrc文件整洁的内容请参考附录B) .
===============================
<h1 style="margin: 17pt 0cm 7.8pt"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">VIM</span></span><span style="font-family: 宋体">做</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'PHP');"><u><strong>PHP</strong></u></a></span></span><span style="font-family: 宋体">开发环境</span></h1><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">作者:廖宇雷</span></span></p><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">虽然</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">本质上只是一个编辑器。但只要配合一些适当的插件,</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">也能变成一个全功能的</span><span><span style="font-family: Calibri">IDE</span></span><span style="font-family: 宋体">。笔者使用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">已经有挺长一段时间了,经过反复的试验,配置了一个高效的</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">开发环境,实为居家旅行、谋财害命、杀人越货必备之良品。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B0%B2%D7%B0');"><u><strong>安装</strong></u></a></span><span><span style="font-family: Cambria">vim</span></span></h2><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">鉴于大多数读者都是使用</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'Windows');"><u><strong>Windows</strong></u></a></span></span><span style="font-family: 宋体">环境,所以本文就以</span><span><span style="font-family: Calibri">Windows</span></span><span style="font-family: 宋体">作为运行环境。不过由于</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">出色的跨平台特性,配置文件只需简单修改就可以在</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'Linux');"><u><strong>Linux</strong></u></a></span></span><span style="font-family: 宋体">版本的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中使用。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">目前</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的最新版本是</span><span><span style="font-family: Calibri">7.2</span></span><span style="font-family: 宋体">,如果没有特别原因建议安装最新的版本。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/download.php#pc"><span style="font-size: small; font-family: Calibri">http://www.vim.org/download.php#pc</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><a href="ftp://ftp.vim.org/pub/vim/pc/gvim72.exe"><span style="color: #800080; font-family: Calibri">ftp://ftp.vim.org/pub/vim/pc/gvim72.exe</span></a></span></span></p><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">安装时</span><span class="MsoIntenseEmphasis"><span style="font-family: 宋体"><strong><span style="color: #4f81bd">不要装到带有空格、中文的目录中</span></strong></span></span><span style="font-family: 宋体">,其他保持默认即可。笔者的安装目录是</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">c:\apps\office\vim</span></span></span><span style="font-family: 宋体">,后文也以此为准。为了叙述方便,笔者用</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM</span></span></span><span></span><span style="font-family: 宋体">来表示</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的安装目录。例如您的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">安装在</span><span><span style="font-family: Calibri">d:\vim\</span></span><span style="font-family: 宋体">中,那</span><span><span style="font-family: Calibri">$VIM</span></span><span style="font-family: 宋体">就代表</span><span><span style="font-family: Calibri">d:\vim\</span></span><span style="font-family: 宋体">。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体">开始配置</span><span><span style="font-family: Cambria">vim</span></span></h2><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">我们对</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的配置分为几个步骤。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">修改</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">后自动生效</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">打开</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM</span></span></span><span></span><span style="font-family: 宋体">目录,可以看到其中有一个</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">_vimrc</span></span></span><span></span><span style="font-family: 宋体">文件,用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">打开此文件,删除所有内容后,在最后插入两行:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" autoload _vimrc</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">autocmd! bufwritepost _vimrc source %</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述命令让我们通过</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">编辑</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">文件并保存时,可以自动载入</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">文件,使得我们对</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的定制可以立即生效(无需重启</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">)。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">使</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中文化</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">顶部增加下列文本:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" disable VI's compatible mode..</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nocompatible</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" set encoding=utf-8</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set fileencodings=ucs-bom,utf-8,gbk,default,latin1</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" use chinese help</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set helplang=cn</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B4%FA%C2%EB');"><u><strong>代码</strong></u></a>的作用是禁用</span><span><span style="font-family: Calibri">vi</span></span><span style="font-family: 宋体">兼容模式(原始的</span><span><span style="font-family: Calibri">vi</span></span><span style="font-family: 宋体">功能太少了,没必要考虑兼容)、按照</span><span><span style="font-family: Calibri">utf-8</span></span><span style="font-family: 宋体">、</span><span><span style="font-family: Calibri">gbk</span></span><span style="font-family: 宋体">的顺序来检测文件编码,并设置帮助为中文。不过设置</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">set helplang=cn</span></span></span><span></span><span style="font-family: 宋体">并不能马上看到中文帮助,我们还得下载中文帮助文件。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://vimcdoc.sourceforge.net/"><span style="font-size: small; font-family: Calibri">http://vimcdoc.sourceforge.net/</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">vimcdoc-1.6.0.tar.gz</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">得到中文帮助文件压缩包后,将压缩包中</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">doc</span></span></span><span></span><span style="font-family: 宋体">子目录的所有文件复制到</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM\vimfiles\doc</span></span></span><span></span><span style="font-family: 宋体">目录中。此时再输入</span><strong><span><span style="color: #ff0000">:help</span></span></strong><span></span><span style="font-family: 宋体">命令就可以看到中文帮助了。</span></span></p><p style="margin: 12pt 0cm 7.8pt; text-align: center" class="MsoNormal" align="center"><span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">中文帮助还是</span><span><span style="font-family: Calibri">7.1</span></span><span style="font-family: 宋体">版的,不过不影响我们使用。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">设置字体</span></span></h3><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">选择</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">菜单的“编辑”</span><span><span style="font-family: Calibri">-></span></span><span style="font-family: 宋体">“选择字体”,就可以为</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">指定喜欢的显示字体了。笔者使用的是</span><span style="font-family: Calibri"><span>Consolas</span></span><span style="font-family: 宋体">字体,大小设置为</span><span><span style="font-family: Calibri">9pt</span></span><span style="font-family: 宋体">。这个设置显示代码非常漂亮,不过中文就有点变形了。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置好后,输入命令</span><strong><span><span style="color: #ff0000">:set guifont</span></span></strong><span></span><span style="font-family: 宋体">可以查看到当前的字体设置,将该设置写入</span><span style="font-family: Calibri"><span>_vimrc</span></span><span style="font-family: 宋体">文件。</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">"set gui options</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">if has("gui_running")</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>set guifont=Consolas:h9</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">endif</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述代码中的</span><span><span style="font-family: Calibri">if … endif</span></span><span style="font-family: 宋体">是一个条件判断结构。指示只有当我们使用图形界面版的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">时才设置字体。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">为编辑</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">代码进行基本设置</span></span></h3><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">现在用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">打开</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件看上去是很难看的,别说代码高亮,连行号都没有显示。所以还要给</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加以下内容:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Enable syntax highlight</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">syntax enable</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Show line number</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nu</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" show matching bracets</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set showmatch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Basic editing options</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set expandtab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set shiftwidth=2</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType html,python,vim,javascript setl shiftwidth=2</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType html,python,vim,javascript setl tabstop=2</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType java,php setl shiftwidth=4</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType java,php setl tabstop=4</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set smarttab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set lbr</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set tw=0</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">"Auto indent</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set ai</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Smart indet</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set si</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" C-style indeting</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set cindent</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Wrap lines</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set wrap</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述设置启用了格式化高亮、行号显示,以及括号匹配、自动缩进等编辑功能,对于大多数情况都可以获得理想的编辑体验。不过此时对</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件的支持还不完善,需要下载专门的</span><span><span style="font-family: Calibri">php</span></span><span style="font-family: 宋体">插件。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=1571"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=1571</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">php.tar.gz</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">将其中的</span><span><span style="font-family: Calibri">php.vim</span></span><span style="font-family: 宋体">复制到</span><span><span style="font-family: Calibri">$VIM\vimfiles\syntax</span></span><span style="font-family: 宋体">目录中即可。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">设置喜欢的配色方案</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">默认的配色方案相信没几个人会喜欢,可以通过下面的网址查看配色方案并下载(有几百个哦)。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">下载网址:</span><span><a href="http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html"><span style="font-family: Calibri">http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html</span></a></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这个网址列出了</span><span><span style="font-family: Calibri">300</span></span><span style="font-family: 宋体">多个配色方案以及实际的显示效果,点击方案名称即可下载到一个</span><span><span style="font-family: Calibri">.vim</span></span><span style="font-family: 宋体">文件。将该文件放入</span><span><span style="font-family: Calibri">$VIM\vimfiles\colors</span></span><span style="font-family: 宋体">目录,然后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">中添加:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" set color schema</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">colorscheme oceandeep</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这两行代码需要加到</span><span style="font-family: Calibri"><span>if has("gui_running") … endif</span></span><span style="font-family: 宋体">代码块中,例如:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">if has("gui_running")</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>set guifont=Consolas:h9</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>" set color schema</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>colorscheme oceandeep</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">endif</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置后显示效果就漂亮多了</span><span><span style="font-family: Calibri">:-)</span></span></span><span><span style="font-size: small; font-family: Calibri">­</span></span></p><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">更多有用的编辑设置</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">虽然不是专门针对编辑</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件的设置,但这些选项可以让</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">更好用,所以建议加上:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Sets how many lines of history VIM har to remember</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set history=400</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Set to auto read when a file is changed from the outside</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set autoread</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Have the mouse enabled all the time:</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set mouse=a</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Do not redraw, when running macros.. lazyredraw</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set lz</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" set 7 lines to the curors - when moving vertical..</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set so=7</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" The commandbar is 2 high</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set cmdheight=2</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Change buffer - without saving</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set hid</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Ignore case when searching</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" set ignorecase</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set incsearch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Set magic on</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set magic</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" No sound on errors.</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set noerrorbells</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set novisualbell</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set t_vb=</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" How many tenths of a second to blink</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set mat=4</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Highlight search things</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set hlsearch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Turn backup off</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nobackup</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nowb</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set noswapfile</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" smart backspace</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set backspace=start,indent,eol</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" switch buffers with Tab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map <C-Tab> :bn<CR></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map <S-Tab> :bp<CR></span></span></p></div><span><span style="font-size: small; font-family: Calibri"> </span></span> <p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">经过一番改造,我们的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">已经可以很顺手的编辑</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件了。不过要打造</span><span><span style="font-family: Calibri">php</span></span><span style="font-family: 宋体">开发环境还有很多<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B9%A4%D7%F7');"><u><strong>工作</strong></u></a>要做呢。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体">打造</span><span><span style="font-family: Cambria">PHP IDE</span></span></h2><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span><span style="font-family: Calibri">IDE</span></span><span style="font-family: 宋体">左侧是目录导航,中间是编辑区域,而右侧则是<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B7%BD%B7%A8');"><u><strong>方法</strong></u></a>列表,用于在已经打开的文件中快速跳转。在编辑区域按下</span><span style="font-family: Calibri"><span>CTRL+X</span></span><span style="font-family: 宋体">键,还会显示已打开文件的列表。</span></span></p><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">其他诸如自动补全、代码模板等功能,都应有尽有。看过了漂亮的截图,我们就来一步步打造</span><span><span style="font-family: Calibri">PHP IDE</span></span><span style="font-family: 宋体">吧。</span></span></p><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">实现目录导航</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">在进行</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">应用开发时,同时编辑多个文件是很正常的事情。所以必须有一个方便的目录导航工具,以便在目录结构间快速切换,找到需要编辑的文件。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中提供该类功能的插件很多,比较知名的有</span><span><span style="font-family: Calibri">project</span></span><span style="font-family: 宋体">、</span><span><span style="font-family: Calibri">winmanager</span></span><span style="font-family: 宋体">等。但笔者个人认为最好用的还是</span><span><span style="font-family: Calibri">The NERD Tree</span></span><span style="font-family: 宋体">这个插件。</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">不但可以显示完整的目录树结构,还可以将任何一个目录设置为根目录。并且提供了目录导航的书签功能,可谓非常方便。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=1658"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=1658</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">NERD_tree.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">解压缩时,要把压缩包中的目录结构完整的解压缩到</span><span><span style="font-family: Calibri">$VIM\vimfiles</span></span><span style="font-family: 宋体">目录中。完成后,应该分别找到</span><span style="font-family: Calibri"><span>$VIM\vimfiles\doc\NERD_tree.txt</span></span><span style="font-family: 宋体">文件和</span><span><span style="font-family: Calibri">$VIM\vimfiles\plugin\NERD_tree.vim</span></span><span style="font-family: 宋体">文件。然后在</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中输入命令</span><strong><span><span style="color: #ff0000">:helptags $VIM\vimfiles\doc</span></span></strong><span style="font-family: 宋体">,将</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">的帮助文档添加到</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">最后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加如下内容:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" NERDTree</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map <F10> :NERDTreeToggle<CR></span></span></p></div><span style="font-size: small"><span style="font-family: 宋体">重启</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">后,按下</span><span><span style="font-family: Calibri">F10</span></span><span style="font-family: 宋体">键,就可以在左侧看到一个目录树了。在目录树窗口中按下</span><span><span style="font-family: Calibri">?</span></span><span style="font-family: 宋体">键可以查看详细的帮助信息。</span></span><span><span style="font-size: small; font-family: Calibri"> </span></span> <p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">最常用的操作键有:</span></span></p><p></p><table border="1" cellspacing="1" cellpadding="1" width="531" style="width: 531px; height: 179px"><tbody><tr><td> <strong><span style="color: #365f91; font-family: 宋体">按键</span><span style="color: #365f91"></span></strong></td><td> <strong><span style="color: #365f91; font-family: 宋体">作用</span><span style="color: #365f91"></span></strong></td></tr><tr><td> <strong><span style="color: #365f91"><span style="font-family: Calibri">C</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(大写</span><span style="color: #365f91"><span style="font-family: Calibri">C</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键)</span><span style="color: #365f91"></span></strong></td><td> <span style="color: #365f91; font-family: 宋体">将光标所在目录设置为根目录</span><span style="color: #365f91"></span></td></tr><tr><td> <strong><span style="color: #365f91"><span style="font-family: Calibri">u</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(小写</span><span style="color: #365f91"><span style="font-family: Calibri">u</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键)</span><span style="color: #365f91"></span></strong></td><td> <span style="color: #365f91; font-family: 宋体">转到上一级目录</span><span style="color: #365f91"></span></td></tr><tr><td> <strong><span style="color: #365f91"><span style="font-family: Calibri">o</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(小写</span><span style="color: #365f91"><span style="font-family: Calibri">o</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键,不是“零”)</span><span style="color: #365f91"></span></strong></td><td> <span style="color: #365f91; font-family: 宋体">展开(或折叠)光标所在目录的子目录。如果光标所在位置是一个文件,则在编辑窗口中打开该文件</span><span style="color: #365f91"></span></td></tr></tbody></table><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">此外在目录树窗口中输入目录</span><span style="color: #ff0000"><strong><span>:Bookmark</span></strong><strong><span style="font-family: 宋体">收藏名</span></strong></span><span style="font-family: 宋体">还可以将光标所在目录添加到收藏夹中。下次使用</span><span style="color: #ff0000"><strong><span>:BookmarkToRoot</span></strong><strong><span style="font-family: 宋体">收藏名</span></strong></span><span style="font-family: 宋体">可以直接转到该目录,并且以该目录作为根目录。更多命令可以参考</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">的帮助文档。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">实现代码导航</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">解决了目录和文件导航问题,我们还要为代码之间的跳转提供辅助手段,</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">就是这样一个插件。</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">可以列出已打开文件中定义的类、函数、常量,甚至变量。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=273"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=273</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">taglist_45.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">压缩包需要完整解压缩到</span><span><span style="font-family: Calibri">$VIM\vimfiles</span></span><span style="font-family: 宋体">目录,并且用</span><strong><span><span style="color: #ff0000">:helptags $VIM\vimfiles\doc</span></span></strong><span></span><span style="font-family: 宋体">命令索引</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件的帮助文档。</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件需要依赖</span><span><span style="font-family: Calibri">ctags</span></span><span style="font-family: 宋体">程序才能工作。目前常用的</span><span><span style="font-family: Calibri">ctags</span></span><span style="font-family: 宋体">版本是</span><span><span style="font-family: Calibri">Exuberant Ctags</span></span><span style="font-family: 宋体">。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://ctags.sourceforge.net/"><span style="font-size: small; font-family: Calibri">http://ctags.sourceforge.net/</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">ec57w32.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">只需要把压缩包中的</span><span><span style="font-family: Calibri">ctags.exe</span></span><span style="font-family: 宋体">复制到</span><span><span style="font-family: Calibri">$VIM\vim72</span></span><span style="font-family: 宋体">目录中即可。</span><span><span style="font-family: Calibri">ctags.exe</span></span><span style="font-family: 宋体">应该和</span><span><span style="font-family: Calibri">gvim.exe</span></span><span style="font-family: 宋体">在一个目录。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">最后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加下列内容,设置好</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" => Plugin configuration</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" taglist</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Highlight_Tag = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Open = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Update = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Close_On_Select = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Compact_Format = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Display_Prototype = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Display_Tag_Scope = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Enable_Fold_Column = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Exit_OnlyWindow = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_File_Fold_Auto_Close = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_GainFocus_On_ToggleOpen = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Hightlight_Tag_On_BufEnter = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Inc_Winwidth = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Max_Submenu_Items = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Max_Tag_Length = 30</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Process_File_Always = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Show_Menu = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Show_One_File = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Sort_Type = "order"</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Use_Horiz_Window = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Use_Right_Window = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_WinWidth = 40</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这里的设置是笔者个人习惯的设置,大家在熟悉</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">的具体设置之前可以先尝试一下。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置完成后,在编辑</span><span><span style="font-family: Calibri">.php</span></span></span></p>
当我们使用Vim时, 你需要知道一系列的配置文件. 这些配置文件的位置依赖于Vim的安装位置和你所使用的操作系统.
通常, 有三个配置文件, 你是必须知道在哪里能找到的.
vimrc
这是Vim最主要的配置文件. 它有两个版本, 全局版本(global)和用户版本(personal)).
全局vimrc文件放在你安装Vim的目录中. 你可以打开vim, 在普通模式下输入下面的命令来找出这个目录的位置
:echo $VIM
结果应该是这样的:
Linux: /usr/share/vim/vimrc
Windows: c:\program files\vim\vimrc
用户版本的vimrc文件放在你的主目录下. 主目录的位置依赖于你的操作系统. Vim最初是为Unix及类Unix操作系统提供的, 所以用户版本的vimrc文件都是通过在文件名的最前面加一个点来设置成隐藏文件. 这是在类Unix上设置隐藏文件的方法, 但不适用于Microsoft Windows. 所以呢, vimrc文件与操作系统有关. 应该是这样的:
Linux: /home/kim/.vimrc
Windows: c:\documents and settings\kim\_vimrc
不管怎么改用户版的vimrc文件, 其中的设置内容都是覆盖在全局vimrc文件中设置的内容. 这就意味着你可以不需要去改变全局vimrc文件来进行配置Vim.
你可以在Vim的普通模式下输入下面的命令, 来找出Vim认为的你的系统的主目录的位置:
:echo $HOME
vimrc文件包含的是ex (vi的前身) 命令, 一条命令一行. 并且vimrc文件也是增加Vim配置信息的默认方式.
你的vimrc可以将其他的文件 (包含着配置信息) 作为外部资源. 在vimrc文件里, 你可用以source命令来实现:
source /path/to/external/file
这样可以使你的vimrc文件保持整洁, 并且你的设置会更加的结构 (更多的关于如何保持vimrc文件整洁的内容请参考附录B) .
===============================
<h1 style="margin: 17pt 0cm 7.8pt"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">VIM</span></span><span style="font-family: 宋体">做</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'PHP');"><u><strong>PHP</strong></u></a></span></span><span style="font-family: 宋体">开发环境</span></h1><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">作者:廖宇雷</span></span></p><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">虽然</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">本质上只是一个编辑器。但只要配合一些适当的插件,</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">也能变成一个全功能的</span><span><span style="font-family: Calibri">IDE</span></span><span style="font-family: 宋体">。笔者使用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">已经有挺长一段时间了,经过反复的试验,配置了一个高效的</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">开发环境,实为居家旅行、谋财害命、杀人越货必备之良品。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B0%B2%D7%B0');"><u><strong>安装</strong></u></a></span><span><span style="font-family: Cambria">vim</span></span></h2><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">鉴于大多数读者都是使用</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'Windows');"><u><strong>Windows</strong></u></a></span></span><span style="font-family: 宋体">环境,所以本文就以</span><span><span style="font-family: Calibri">Windows</span></span><span style="font-family: 宋体">作为运行环境。不过由于</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">出色的跨平台特性,配置文件只需简单修改就可以在</span><span><span style="font-family: Calibri"><a href="javascript:;" target="_self" onclick="javascript:tagshow(event, 'Linux');"><u><strong>Linux</strong></u></a></span></span><span style="font-family: 宋体">版本的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中使用。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">目前</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的最新版本是</span><span><span style="font-family: Calibri">7.2</span></span><span style="font-family: 宋体">,如果没有特别原因建议安装最新的版本。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/download.php#pc"><span style="font-size: small; font-family: Calibri">http://www.vim.org/download.php#pc</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><a href="ftp://ftp.vim.org/pub/vim/pc/gvim72.exe"><span style="color: #800080; font-family: Calibri">ftp://ftp.vim.org/pub/vim/pc/gvim72.exe</span></a></span></span></p><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">安装时</span><span class="MsoIntenseEmphasis"><span style="font-family: 宋体"><strong><span style="color: #4f81bd">不要装到带有空格、中文的目录中</span></strong></span></span><span style="font-family: 宋体">,其他保持默认即可。笔者的安装目录是</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">c:\apps\office\vim</span></span></span><span style="font-family: 宋体">,后文也以此为准。为了叙述方便,笔者用</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM</span></span></span><span></span><span style="font-family: 宋体">来表示</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的安装目录。例如您的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">安装在</span><span><span style="font-family: Calibri">d:\vim\</span></span><span style="font-family: 宋体">中,那</span><span><span style="font-family: Calibri">$VIM</span></span><span style="font-family: 宋体">就代表</span><span><span style="font-family: Calibri">d:\vim\</span></span><span style="font-family: 宋体">。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体">开始配置</span><span><span style="font-family: Cambria">vim</span></span></h2><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">我们对</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的配置分为几个步骤。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">修改</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">后自动生效</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">打开</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM</span></span></span><span></span><span style="font-family: 宋体">目录,可以看到其中有一个</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">_vimrc</span></span></span><span></span><span style="font-family: 宋体">文件,用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">打开此文件,删除所有内容后,在最后插入两行:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" autoload _vimrc</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">autocmd! bufwritepost _vimrc source %</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述命令让我们通过</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">编辑</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">文件并保存时,可以自动载入</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">文件,使得我们对</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">的定制可以立即生效(无需重启</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">)。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">使</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中文化</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">顶部增加下列文本:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" disable VI's compatible mode..</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nocompatible</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" set encoding=utf-8</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set fileencodings=ucs-bom,utf-8,gbk,default,latin1</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" use chinese help</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set helplang=cn</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B4%FA%C2%EB');"><u><strong>代码</strong></u></a>的作用是禁用</span><span><span style="font-family: Calibri">vi</span></span><span style="font-family: 宋体">兼容模式(原始的</span><span><span style="font-family: Calibri">vi</span></span><span style="font-family: 宋体">功能太少了,没必要考虑兼容)、按照</span><span><span style="font-family: Calibri">utf-8</span></span><span style="font-family: 宋体">、</span><span><span style="font-family: Calibri">gbk</span></span><span style="font-family: 宋体">的顺序来检测文件编码,并设置帮助为中文。不过设置</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">set helplang=cn</span></span></span><span></span><span style="font-family: 宋体">并不能马上看到中文帮助,我们还得下载中文帮助文件。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://vimcdoc.sourceforge.net/"><span style="font-size: small; font-family: Calibri">http://vimcdoc.sourceforge.net/</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">vimcdoc-1.6.0.tar.gz</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">得到中文帮助文件压缩包后,将压缩包中</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">doc</span></span></span><span></span><span style="font-family: 宋体">子目录的所有文件复制到</span><span class="MsoSubtleReference"><span><span style="color: #c0504d; font-family: Verdana">$VIM\vimfiles\doc</span></span></span><span></span><span style="font-family: 宋体">目录中。此时再输入</span><strong><span><span style="color: #ff0000">:help</span></span></strong><span></span><span style="font-family: 宋体">命令就可以看到中文帮助了。</span></span></p><p style="margin: 12pt 0cm 7.8pt; text-align: center" class="MsoNormal" align="center"><span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">中文帮助还是</span><span><span style="font-family: Calibri">7.1</span></span><span style="font-family: 宋体">版的,不过不影响我们使用。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">设置字体</span></span></h3><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">选择</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">菜单的“编辑”</span><span><span style="font-family: Calibri">-></span></span><span style="font-family: 宋体">“选择字体”,就可以为</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">指定喜欢的显示字体了。笔者使用的是</span><span style="font-family: Calibri"><span>Consolas</span></span><span style="font-family: 宋体">字体,大小设置为</span><span><span style="font-family: Calibri">9pt</span></span><span style="font-family: 宋体">。这个设置显示代码非常漂亮,不过中文就有点变形了。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置好后,输入命令</span><strong><span><span style="color: #ff0000">:set guifont</span></span></strong><span></span><span style="font-family: 宋体">可以查看到当前的字体设置,将该设置写入</span><span style="font-family: Calibri"><span>_vimrc</span></span><span style="font-family: 宋体">文件。</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">"set gui options</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">if has("gui_running")</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>set guifont=Consolas:h9</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">endif</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述代码中的</span><span><span style="font-family: Calibri">if … endif</span></span><span style="font-family: 宋体">是一个条件判断结构。指示只有当我们使用图形界面版的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">时才设置字体。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">为编辑</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">代码进行基本设置</span></span></h3><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">现在用</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">打开</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件看上去是很难看的,别说代码高亮,连行号都没有显示。所以还要给</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加以下内容:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Enable syntax highlight</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">syntax enable</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Show line number</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nu</span></span></p><span></span><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" show matching bracets</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set showmatch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Basic editing options</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set expandtab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set shiftwidth=2</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType html,python,vim,javascript setl shiftwidth=2</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType html,python,vim,javascript setl tabstop=2</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType java,php setl shiftwidth=4</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">au FileType java,php setl tabstop=4</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set smarttab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set lbr</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set tw=0</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">"Auto indent</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set ai</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Smart indet</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set si</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" C-style indeting</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set cindent</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Wrap lines</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set wrap</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">上述设置启用了格式化高亮、行号显示,以及括号匹配、自动缩进等编辑功能,对于大多数情况都可以获得理想的编辑体验。不过此时对</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件的支持还不完善,需要下载专门的</span><span><span style="font-family: Calibri">php</span></span><span style="font-family: 宋体">插件。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=1571"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=1571</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">php.tar.gz</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">将其中的</span><span><span style="font-family: Calibri">php.vim</span></span><span style="font-family: 宋体">复制到</span><span><span style="font-family: Calibri">$VIM\vimfiles\syntax</span></span><span style="font-family: 宋体">目录中即可。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">设置喜欢的配色方案</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">默认的配色方案相信没几个人会喜欢,可以通过下面的网址查看配色方案并下载(有几百个哦)。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">下载网址:</span><span><a href="http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html"><span style="font-family: Calibri">http://www.cs.cmu.edu/~maverick/VimColorSchemeTest/index-c.html</span></a></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这个网址列出了</span><span><span style="font-family: Calibri">300</span></span><span style="font-family: 宋体">多个配色方案以及实际的显示效果,点击方案名称即可下载到一个</span><span><span style="font-family: Calibri">.vim</span></span><span style="font-family: 宋体">文件。将该文件放入</span><span><span style="font-family: Calibri">$VIM\vimfiles\colors</span></span><span style="font-family: 宋体">目录,然后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">中添加:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" set color schema</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">colorscheme oceandeep</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这两行代码需要加到</span><span style="font-family: Calibri"><span>if has("gui_running") … endif</span></span><span style="font-family: 宋体">代码块中,例如:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">if has("gui_running")</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>set guifont=Consolas:h9</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>" set color schema</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small"><span style="color: #244061"><span style="font-family: Consolas"><span> </span>colorscheme oceandeep</span></span></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">endif</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置后显示效果就漂亮多了</span><span><span style="font-family: Calibri">:-)</span></span></span><span><span style="font-size: small; font-family: Calibri">­</span></span></p><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-family: 宋体"><span style="font-size: large">更多有用的编辑设置</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">虽然不是专门针对编辑</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件的设置,但这些选项可以让</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">更好用,所以建议加上:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Sets how many lines of history VIM har to remember</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set history=400</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Set to auto read when a file is changed from the outside</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set autoread</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Have the mouse enabled all the time:</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set mouse=a</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Do not redraw, when running macros.. lazyredraw</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set lz</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" set 7 lines to the curors - when moving vertical..</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set so=7</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" The commandbar is 2 high</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set cmdheight=2</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Change buffer - without saving</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set hid</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Ignore case when searching</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" set ignorecase</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set incsearch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Set magic on</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set magic</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" No sound on errors.</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set noerrorbells</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set novisualbell</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set t_vb=</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" How many tenths of a second to blink</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set mat=4</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Highlight search things</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set hlsearch</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" Turn backup off</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nobackup</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set nowb</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set noswapfile</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" smart backspace</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">set backspace=start,indent,eol</span></span></p><span><span style="font-size: small; color: #244061; font-family: Consolas"> </span></span> <p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" switch buffers with Tab</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map <C-Tab> :bn<CR></span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map <S-Tab> :bp<CR></span></span></p></div><span><span style="font-size: small; font-family: Calibri"> </span></span> <p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt; text-align: left" class="MsoNormal" align="left"><span style="font-size: small"><span style="font-family: 宋体">经过一番改造,我们的</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">已经可以很顺手的编辑</span><span><span style="font-family: Calibri">.php</span></span><span style="font-family: 宋体">文件了。不过要打造</span><span><span style="font-family: Calibri">php</span></span><span style="font-family: 宋体">开发环境还有很多<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B9%A4%D7%F7');"><u><strong>工作</strong></u></a>要做呢。</span></span></p><span></span><h2 style="margin: 13pt 0cm 7.8pt"><span style="font-family: 宋体">打造</span><span><span style="font-family: Cambria">PHP IDE</span></span></h2><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span><span style="font-family: Calibri">IDE</span></span><span style="font-family: 宋体">左侧是目录导航,中间是编辑区域,而右侧则是<a href="javascript:;" target="_self" onclick="javascript:tagshow(event, '%B7%BD%B7%A8');"><u><strong>方法</strong></u></a>列表,用于在已经打开的文件中快速跳转。在编辑区域按下</span><span style="font-family: Calibri"><span>CTRL+X</span></span><span style="font-family: 宋体">键,还会显示已打开文件的列表。</span></span></p><p style="margin: 0cm 0cm 7.8pt" class="MsoNormal"></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">其他诸如自动补全、代码模板等功能,都应有尽有。看过了漂亮的截图,我们就来一步步打造</span><span><span style="font-family: Calibri">PHP IDE</span></span><span style="font-family: 宋体">吧。</span></span></p><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">实现目录导航</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">在进行</span><span><span style="font-family: Calibri">PHP</span></span><span style="font-family: 宋体">应用开发时,同时编辑多个文件是很正常的事情。所以必须有一个方便的目录导航工具,以便在目录结构间快速切换,找到需要编辑的文件。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中提供该类功能的插件很多,比较知名的有</span><span><span style="font-family: Calibri">project</span></span><span style="font-family: 宋体">、</span><span><span style="font-family: Calibri">winmanager</span></span><span style="font-family: 宋体">等。但笔者个人认为最好用的还是</span><span><span style="font-family: Calibri">The NERD Tree</span></span><span style="font-family: 宋体">这个插件。</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">不但可以显示完整的目录树结构,还可以将任何一个目录设置为根目录。并且提供了目录导航的书签功能,可谓非常方便。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=1658"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=1658</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">NERD_tree.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">解压缩时,要把压缩包中的目录结构完整的解压缩到</span><span><span style="font-family: Calibri">$VIM\vimfiles</span></span><span style="font-family: 宋体">目录中。完成后,应该分别找到</span><span style="font-family: Calibri"><span>$VIM\vimfiles\doc\NERD_tree.txt</span></span><span style="font-family: 宋体">文件和</span><span><span style="font-family: Calibri">$VIM\vimfiles\plugin\NERD_tree.vim</span></span><span style="font-family: 宋体">文件。然后在</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中输入命令</span><strong><span><span style="color: #ff0000">:helptags $VIM\vimfiles\doc</span></span></strong><span style="font-family: 宋体">,将</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">的帮助文档添加到</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">中。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">最后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加如下内容:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" NERDTree</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">map <F10> :NERDTreeToggle<CR></span></span></p></div><span style="font-size: small"><span style="font-family: 宋体">重启</span><span><span style="font-family: Calibri">vim</span></span><span style="font-family: 宋体">后,按下</span><span><span style="font-family: Calibri">F10</span></span><span style="font-family: 宋体">键,就可以在左侧看到一个目录树了。在目录树窗口中按下</span><span><span style="font-family: Calibri">?</span></span><span style="font-family: 宋体">键可以查看详细的帮助信息。</span></span><span><span style="font-size: small; font-family: Calibri"> </span></span> <p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">最常用的操作键有:</span></span></p><p></p><table border="1" cellspacing="1" cellpadding="1" width="531" style="width: 531px; height: 179px"><tbody><tr><td> <strong><span style="color: #365f91; font-family: 宋体">按键</span><span style="color: #365f91"></span></strong></td><td> <strong><span style="color: #365f91; font-family: 宋体">作用</span><span style="color: #365f91"></span></strong></td></tr><tr><td> <strong><span style="color: #365f91"><span style="font-family: Calibri">C</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(大写</span><span style="color: #365f91"><span style="font-family: Calibri">C</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键)</span><span style="color: #365f91"></span></strong></td><td> <span style="color: #365f91; font-family: 宋体">将光标所在目录设置为根目录</span><span style="color: #365f91"></span></td></tr><tr><td> <strong><span style="color: #365f91"><span style="font-family: Calibri">u</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(小写</span><span style="color: #365f91"><span style="font-family: Calibri">u</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键)</span><span style="color: #365f91"></span></strong></td><td> <span style="color: #365f91; font-family: 宋体">转到上一级目录</span><span style="color: #365f91"></span></td></tr><tr><td> <strong><span style="color: #365f91"><span style="font-family: Calibri">o</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">(小写</span><span style="color: #365f91"><span style="font-family: Calibri">o</span></span></strong><strong><span style="color: #365f91; font-family: 宋体">键,不是“零”)</span><span style="color: #365f91"></span></strong></td><td> <span style="color: #365f91; font-family: 宋体">展开(或折叠)光标所在目录的子目录。如果光标所在位置是一个文件,则在编辑窗口中打开该文件</span><span style="color: #365f91"></span></td></tr></tbody></table><span></span><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">此外在目录树窗口中输入目录</span><span style="color: #ff0000"><strong><span>:Bookmark</span></strong><strong><span style="font-family: 宋体">收藏名</span></strong></span><span style="font-family: 宋体">还可以将光标所在目录添加到收藏夹中。下次使用</span><span style="color: #ff0000"><strong><span>:BookmarkToRoot</span></strong><strong><span style="font-family: 宋体">收藏名</span></strong></span><span style="font-family: 宋体">可以直接转到该目录,并且以该目录作为根目录。更多命令可以参考</span><span><span style="font-family: Calibri">NERDTree</span></span><span style="font-family: 宋体">的帮助文档。</span></span></p><span></span><h3 style="margin: 13pt 0cm 7.8pt 21pt"><span style="font-size: large"><span style="font-family: 宋体">用</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">实现代码导航</span></span></h3><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">解决了目录和文件导航问题,我们还要为代码之间的跳转提供辅助手段,</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">就是这样一个插件。</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">可以列出已打开文件中定义的类、函数、常量,甚至变量。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://www.vim.org/scripts/script.php?script_id=273"><span style="font-size: small; font-family: Calibri">http://www.vim.org/scripts/script.php?script_id=273</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">taglist_45.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">压缩包需要完整解压缩到</span><span><span style="font-family: Calibri">$VIM\vimfiles</span></span><span style="font-family: 宋体">目录,并且用</span><strong><span><span style="color: #ff0000">:helptags $VIM\vimfiles\doc</span></span></strong><span></span><span style="font-family: 宋体">命令索引</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件的帮助文档。</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件需要依赖</span><span><span style="font-family: Calibri">ctags</span></span><span style="font-family: 宋体">程序才能工作。目前常用的</span><span><span style="font-family: Calibri">ctags</span></span><span style="font-family: 宋体">版本是</span><span><span style="font-family: Calibri">Exuberant Ctags</span></span><span style="font-family: 宋体">。</span></span></p><p style="margin: 0cm 0cm 7.8pt 21pt" class="MsoNormal"><span style="font-family: 宋体"><span style="font-size: small">下载地址:</span></span><span><a href="http://ctags.sourceforge.net/"><span style="font-size: small; font-family: Calibri">http://ctags.sourceforge.net/</span></a><span style="font-size: small; font-family: Calibri"><br /></span></span><span style="font-size: small"><span style="font-family: 宋体">下载文件:</span><span><span style="font-family: Calibri">ec57w32.zip</span></span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">只需要把压缩包中的</span><span><span style="font-family: Calibri">ctags.exe</span></span><span style="font-family: 宋体">复制到</span><span><span style="font-family: Calibri">$VIM\vim72</span></span><span style="font-family: 宋体">目录中即可。</span><span><span style="font-family: Calibri">ctags.exe</span></span><span style="font-family: 宋体">应该和</span><span><span style="font-family: Calibri">gvim.exe</span></span><span style="font-family: 宋体">在一个目录。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">最后在</span><span><span style="font-family: Calibri">_vimrc</span></span><span style="font-family: 宋体">添加下列内容,设置好</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">插件:</span></span></p><div style="border-right: medium none; padding-right: 0cm; border-top: medium none; padding-left: 4pt; padding-bottom: 0cm; margin-left: 21pt; border-left: 1pt solid; margin-right: 21pt; padding-top: 0cm; border-bottom: medium none"><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" => Plugin configuration</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">" taglist</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Highlight_Tag = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Open = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Auto_Update = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Close_On_Select = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Compact_Format = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Display_Prototype = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Display_Tag_Scope = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Enable_Fold_Column = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Exit_OnlyWindow = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_File_Fold_Auto_Close = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_GainFocus_On_ToggleOpen = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Hightlight_Tag_On_BufEnter = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Inc_Winwidth = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Max_Submenu_Items = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Max_Tag_Length = 30</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Process_File_Always = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Show_Menu = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Show_One_File = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Sort_Type = "order"</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Use_Horiz_Window = 0</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_Use_Right_Window = 1</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let Tlist_WinWidth = 40</span></span></p><p style="margin: 0cm 0cm 0pt" class="code"><span><span style="font-size: small; color: #244061; font-family: Consolas">let tlist_php_settings = 'php;c:class;i:interfaces;d:constant;f:function'</span></span></p></div><p style="margin: 12pt 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">这里的设置是笔者个人习惯的设置,大家在熟悉</span><span><span style="font-family: Calibri">taglist</span></span><span style="font-family: 宋体">的具体设置之前可以先尝试一下。</span></span></p><p style="margin: 0cm 0cm 7.8pt; text-indent: 21pt" class="MsoNormal"><span style="font-size: small"><span style="font-family: 宋体">设置完成后,在编辑</span><span><span style="font-family: Calibri">.php</span></span></span></p>
为什么跟黑客帝国扯上关系呢,呵呵,这得从ASP.NET的封装讲起
在黑客帝国中所有的人他们全都自认为生活在一个有阳光,有绿色的世界中,实际上却是矩阵所构造的一种虚像与控制,他们不知道自已一直都在营养容器里面过着日子
就好像搞ASP.NET的人,他们跟泡在营养容器里的人一样,被MS构造出来的各种各样的类库包围着,他们从来不会想过这些类库是怎么来的(这些命名空间怎么来的),他们只关心怎么使用这些类库,这些命名空间,底层如何实现这些东西很少有人会去考虑。
他们实例化着MS提供的类库,调用着MS已经实现了的对像方法,但没有人见过这些类库的源码或是没有人知道这些类库及类库的方法是怎么实现的,就好像黑客帝国里面的人从来就没有试着睁开眼睛看到过外面的世界,他们只生活在被虚拟出来的环境中~
这两者何其相似
比如说调用AJAX,在asp.net中这现实AJAX何其简单,如果是之前没接触过别的WEB编程语言的直接来用ASP.net,他可能就不知道原来 WEB要实现AJAX要通过JS,要通过XML,要通过xmlhttp,他只会觉得,WEB原本就是可以这样子的,他的思维给MS虚拟构造出来的假象给蒙蔽了。
就好像在黑客帝国里生活在矩阵电脑里的人都能一跳跳个十几米几十米的,他们可能会觉得很正常,但是现实中不是这样子的,现实中那不是正常的。
再举个例子,树状菜单,动态载入的
在PHP(应该说是常规中才对)中我们要实现树状菜单
假设在不知道有XLoadTree的情况下,我们可能要一砖一瓦的搞起,这样,我们了解非常深,知道每一次点击会触发什么事件,隐藏了什么,又显示了什么,又传输了什么,每个事件的触发都是我们自定义的
在后来知道了有XLoadTree类库的情况下,我们非常容易的就可以实现树状菜单,而且通过查看源码我们也可以很容易的了解到JS实现这些功能的过程和原理。
但是在asp.net中,实现这一切多么的简单,直接从控件栏里面拖TreeView过来就行了,你需要了解JS吗?不需要,尽管最终在浏览器端实现这一切的是用JS,但是,你不需要了解JS,你只需要知道treeview这个控件怎么用就行了,也就是说,你不会知道底层是怎么回事,最终的JS是怎么实现的。
在黑客帝国中所有的人他们全都自认为生活在一个有阳光,有绿色的世界中,实际上却是矩阵所构造的一种虚像与控制,他们不知道自已一直都在营养容器里面过着日子
就好像搞ASP.NET的人,他们跟泡在营养容器里的人一样,被MS构造出来的各种各样的类库包围着,他们从来不会想过这些类库是怎么来的(这些命名空间怎么来的),他们只关心怎么使用这些类库,这些命名空间,底层如何实现这些东西很少有人会去考虑。
他们实例化着MS提供的类库,调用着MS已经实现了的对像方法,但没有人见过这些类库的源码或是没有人知道这些类库及类库的方法是怎么实现的,就好像黑客帝国里面的人从来就没有试着睁开眼睛看到过外面的世界,他们只生活在被虚拟出来的环境中~
这两者何其相似
比如说调用AJAX,在asp.net中这现实AJAX何其简单,如果是之前没接触过别的WEB编程语言的直接来用ASP.net,他可能就不知道原来 WEB要实现AJAX要通过JS,要通过XML,要通过xmlhttp,他只会觉得,WEB原本就是可以这样子的,他的思维给MS虚拟构造出来的假象给蒙蔽了。
就好像在黑客帝国里生活在矩阵电脑里的人都能一跳跳个十几米几十米的,他们可能会觉得很正常,但是现实中不是这样子的,现实中那不是正常的。
再举个例子,树状菜单,动态载入的
在PHP(应该说是常规中才对)中我们要实现树状菜单
假设在不知道有XLoadTree的情况下,我们可能要一砖一瓦的搞起,这样,我们了解非常深,知道每一次点击会触发什么事件,隐藏了什么,又显示了什么,又传输了什么,每个事件的触发都是我们自定义的
在后来知道了有XLoadTree类库的情况下,我们非常容易的就可以实现树状菜单,而且通过查看源码我们也可以很容易的了解到JS实现这些功能的过程和原理。
但是在asp.net中,实现这一切多么的简单,直接从控件栏里面拖TreeView过来就行了,你需要了解JS吗?不需要,尽管最终在浏览器端实现这一切的是用JS,但是,你不需要了解JS,你只需要知道treeview这个控件怎么用就行了,也就是说,你不会知道底层是怎么回事,最终的JS是怎么实现的。
引言
达尔文在进化论中写道“物竞天择,适者生存”,达老的观点是:这个世界上能够生存下
来的物种,不是身体最强壮的,也不是智商最高的,而是对环境适应能力最强的。很久以前,
体型庞大的恐龙没有生存下来,嗝屁了;当年和人类智商一样高的猿猴,没进化成功,堕落
了;只有人类,从与猿猴一样的造型不断的进化至今,在这个过程中人类不断的去学习,学
会取火、制作工具、直立行走……演化至今。不断的学习新的技术,适应环境的变化,并改
造环境甚至创造环境,成就了人类的今天。
在这个竞争日益激烈的社会,在IT 行业这个飞速发展的领域,做为程序员的我们,能否
适应这个环境,甚至成为这个环境的主宰,学习力是我们得以生存和更好的生活的关键。而
计算机技术日新月异的变化,也要求我们程序员要不断的学习,不断的充实自己。时代光华
曾经有一句口号:“知识改变命运学习成就未来”,此话有道啊。很多企业招聘时,也都特别
对新人提出一个要求:具备良好的学习能力。
搞技术是一个很累的事情,很多程序员都这样感慨,初学时觉得不会的东西太多,做了
几年后还是感觉学无止境,即便是一个N 年的老鸟,也还要不断充电,否则没两年恐怕就没
法在这个圈子里面混了。很多朋友都在疲于奔命,哀号学习之苦。
有一个业界广泛流传的故事:一富婆(估计是体重200 斤以上、脸上的粉刮下来可以包
二三十个饺子、说话眼睛看天花板的老女人)去夜总会找乐子,殷勤的老板娘挑了几个帅小
伙,富婆不满意;又挑了几个壮小伙,富婆还不满意;老板娘问富婆到底想要什么样的啊,
富婆说“体力好、精力旺、能加班、能熬夜、随叫随到、吃苦耐劳”,老板娘一下乐了……张
口大喊:“机房里搞程序,出来接客!”
可见程序员平日的工作恐怕就已经很繁忙了……不过就像我一直坚定的认为程序员的形
象不应该是“工作狂人、缺少情趣、蓬头垢面、衣着杂乱、身有异味”一样,我们要管理好
我们的时间,时间就像海绵里的水,马克思告诉俺们,要挤就一定会有的,工作可以满足我
们的现在,学习才可以成就我们的未来。本文旨在根据笔者的经验,给亲爱的读者们一点点
学习的建议。
1 学习的目标管理
怎么学习是个方法问题,我们稍后再谈,但是在此之前想要搞明白我们要学习什么,这
是个目标问题。很多程序员没有明确的目标,不知道自己最终要的是一种什么样的生活,也
不清楚自己三年以后五年以后十年以后的人生目标是什么,甚至连三个月半年或是一年内的
短期目标也没有,那自然也就无从谈起明确的学习目标。
曾经看过这样一个故事,在美国的贫民区,有一个十几岁的小孩,一直梦想着有一天可
以成为美国总统,于是他开始构思:要成为总统,就必须先做州长;要做州长,就要有钱去
拉选票;要想有钱,就得娶一富家千金;要娶千金,做影坛明星最合适不过;为做明星又得
有魅力,于是他开始学习健美,亲爱的看官,您觉得这个小孩的梦想会实现吗?您是不是认
为这就是传说中的“扯犊子”,美国式白日梦……
不过,这是一个真实的故事,后来,这个小孩果然非池中之物,练习健美得了N 个国内
国际的健美大赛冠军,甚至还出了几本健美健身类的书;后来打入好莱坞拍了很多部很牛X
的电影成了国际明星;坚持多年的感情终于娶到了富家千金,这个千金大有来头,就是被枪
杀的美国总统肯尼迪的侄女;再后来息影从政,如愿当选了美国加州州长。现在,他就差没
把小布什赶出白宫了,是的,相信您应该也猜到了,他就是--阿诺德·施瓦辛格。
这个真实的故事告诉我们,只要有梦想,做好规划,奋力去拼搏,一切皆有可能(此处
为支持国货,插播李宁公司广告)。
个人建议,如果您是一个新丁,刚入行的几年,多学技术;如果您已经变成一个大手,
那么可以学学管理或者市场方面的知识。新手最重要的是技术的累积,毕竟想成为项目经理
或是技术总监等大鸟,第一个前提还是技术要过硬,否则无法服众,技术永远都是程序员的
第一看家本领;在中国这个环境,很少有程序员能做到35 岁,一般到了30 岁左右至少要前
进一步——做个主管,这时可能更多需要的是带领技术团队的能力、与客户沟通的能力等等,
如果想拉大旗自己干,则更是如此。
但是,诚如施瓦辛格的故事一样,我们要有一个规划,至少要确定自己的长期目标和短
期目标,并列出计划,努力行动。比如,我们制订出三年内的目标,假设您是一个新手,您
是要强化自己的英文能力,学习英语;或是要增加学历的厚度,读个研究生;还是要狠K 一
项新的技能,比如PHP……总之,这三年内我们要定一下学习的目标,可能第一年我们达到
阅读计算机英语完全没有问题,第二年我们要K 下来PHP,在这三年中我们要努力考取研究
生并读完获得学历。总之,我们要有一个计划,然后进行分解,如果我们要搞定英语阅读能
力,我们怎么办?12 个月、48 周、365 天,每个月达到什么程度,每周完成多少任务,每天
做哪些学习(假设是每天背下来15 个英文单词,阅读千字左右的文档3 篇)。那么,我们的
目标就落实了,计划就落地了,目标才会随着每天每周每月的过去而逐步实现。
要立长志,不要常立志。随波逐流,撞大运,听天命,永远成为不了高手,毕竟天上没
那么多馅饼掉下来,就算掉下来也未必正好砸咱脑袋上不是吗。
2 学习的时间管理
程序员自己的时间,似乎少的可怜,有时我们要加班加点,有时我们要封闭开发,还有
时客户请吃饭我们喝大了……所以很多程序员说,忙得连谈女朋友的时间都没有,可是,生
活不会因为这些借口而宽容我们。房价依然会高到离谱,女朋友依然会抱怨没人陪伴,通货
膨胀也不会就此停止……生活依然要继续,我们不能停下脚步,不能停下学习进步的脚步。
对此,我有两个看法,第一个看法,让我们来看一个小故事吧——
一位管理专家在一群学生面前,拿出一个广口瓶放在桌上,同时拿出了几十个拳头大小
的石块,一个个放进瓶中,当石块放满整个瓶子后,专家问:“瓶子装满了吗?”
同学们回答:“装满了!”
“真的吗?”专家再拿出一桶碎石,取出一把倒入瓶中,再把瓶子摇一摇,让碎石填入
石块中的缝隙,“瓶子装满了吗?”。
有位同学回答:“也许没有”。
“很好!”专家又拿出一桶沙子倒进瓶中,充满了石块所留下的空间,然后再问:“瓶子
装满了吗?”
全班大声回应:“没有!”
“非常好!”这次专家拿出一壶水,注入瓶中,直到水满至瓶口。专家看着全班同学问道:
“这个展示的重点是什么?”
一位勇敢的学生举手说:“无论你的日程排得有多满,只要尽全力安排,还是可以安排很
多事情!”
专家回答:“错!”,重点是——
“如果你不先把石块放进去,就永远也放不进去了!”
在生活中大家有没有发现,我们很多很多的时间浪费在了无关紧要的小事上,而我们的
目标是重要的紧急的事情,可惜,它却没有获得最多的时间去处理。大事法则告诉我们,做
事要有条理,不要抱怨没有时间,先看看,要做的事情是不是每一件都是重要的或者紧急的,
不要再让琐碎的小事浪费自己的生命了。
我的第二个看法:学会化零为整,尽量把时间用在重要和紧急的事情上,但是我们仍然
会有大把时间是零散的。
我曾经听过一个讲座,叫《做自己想做的人》,主讲人讲了一个自己的时间管理的方法,
就是:随时随地都可以休息。牛啊,他可以把所有的时间有效利用,虽然他也很忙,但是如
果今天公司组织出去卡拉OK,他也可以在包厢嘈杂的声音中睡着(我当年也练成了一个本
领,就是可以在公车或地铁上抓住扶手,头靠在胳膊上,三十秒入睡)。即便有一点小小的时
间,那怕在等车,那怕在等人,都可以掏出来一本书看,这就时间管理的观念。
在时间管理上有三个“B”——Bathe 洗澡、Bus 坐车、Bed 睡觉
有多少人,在洗澡的时候在发呆在胡思乱想;有多少人,在坐车的时候在东张西望;有
多少人,在睡觉前在数绵羊或者是大脑一片空白……那么,把这些时间好好利用起来吧,我
们可不可以在洗澡的时候想想今天写的一段代码为什么执行报错;我们可不可以在清晨坐车
的时候看看技术书籍或者计划一下一天的工作;我们可不可以在睡觉前想一下今天都做了什
么事情有没有什么经验教训要总结……如果这些零散的时间我们都能利用起来,积少成多,
您会发现,有一天,会改变我们的生活。
3 学习的方法问题
凡事要讲究方法,才能事半功倍。愚公移山固然可贵,可惜要“子子孙孙无穷尽也”,这
玩艺咱来不了……
就比如今天一个兄弟说想要学习Linux,问我什么方法最好,那么我可以给出一个选择:
首选,找个Linux 高手当师傅来带你入门直至出徒;次选,参加一个Linux 培训班和老师学
习;次次选,买一本Linux 书边看边实践;次次次选,在网上搜索资料自学。
可能各位看官都觉得通过网络学习(比如通过论坛等获取知识的途经)是很好的方法,
诚然这是方法之一,但是如果想最快最有效的学习Linux,对于一个初学者,首选当然是有师
傅来指导,有过来人讲述亲身经验,可以让他走过的弯路我们不再走,他的经验教训我们拿
来就用,这是最快的一种方法;如果不具备这样的机会,条件允许可以参加个培训班,授课
的老师会总结自己的体会和经验,系统化的把知识讲给我们听,这种学习速度也比较快;如
果资金有困难,那么强烈建议至少要买一本书,毕竟好的书是作者的心得体会的总结,看一
本书可以让我们学习更条理化;当然如果您真是一毛不拔,书都不想买,只是想通过网络学
习,那么我只能说这并不适合初学者,因为网上知识太乱太杂,老鸟去获取是一种很好的手
段,可是新手往往无法分辨,效果自然惨不忍睹。这就是方法的问题。
再比如,假设看官您是刚刚升任公司项目部经理,首先面临的一个最大的问题就是,如
何在竞标中向客户做演示讲解,这对于平时埋头做技术沉默寡言的您是否是个挑战?没办法
了,回家对着四面墙狂练吧,但是练习也要有方法,一方面可以从网上找些产品演示或演讲
技巧的视频教程或者买相关的书籍来看,或者向前辈讨教下,这是必要的;另一方面自己练
习时,要有方法,比如可以使用电脑的录音功能录制下来自己练习的过程,回过头来,自己
去听自己的讲解是否满意,然后总结什么地方有问题,依次循环往复,相信会受益最多效果
最好进步最快,这就是方法了。
不为失败找借口,要为成功找方法,方法是让我们的时间更有效的重要手段,比如笔者
每天晚上都会总结好第二天要做的事项,一个一个列在日程表中,第二天,做完一个划掉一
个,虽然同样是做事情,但是这种成就感是让人做事非常愉快的,而且事情也不容易遗漏,
这也是一种方法。
“黑猫白猫抓到耗子就是好猫”,可是我们总不能让一只猫搞了一个月才抓到耗子,时间
不等人,找到适合自己的学习方法,是达成目标的关键。我曾经认识一位学习Linux 的新人,
成天捧着一本《Linux 命令大全》疯狂的看书敲命令,我真不忍心打击他,因为Linux 现在至
少有两三千个命令,每个命令平均有二三十个选项,要敲到什么时候呢……何况这些命令和
选项,我使用Linux 七年了,感觉也不过用到其中十分之一都不到,常用的并没有那么多……
可惜啊,时间就这样别浪费了,这就是方法的错误。
本文到此,也该结束了,本文名为《学习的革命》,实则是作者作为夜色版块标题党一员
的通病,内容没有那么“革命”,鲁迅先生讲我们要革了谁的命,我想,作为程序员来讲,先
革了自己的命吧,如果过去您在懒惰您在懈怠,如果过去您在为学习找借口想托词,先革了
自己的命,改变,从新来过。
如果还不清楚要怎么开始,那么给您个建议,先搞明白这三个事情——
为何学习
学习什么
怎么学习
我坚信任何一个人都渴望成功,任何一个人都期望过自己想过的生活,不付出辛勤的汗
水,这是不可能实现的……天上的馅饼,如同程序员中的美女一样,总是很少很少的,与其
白日发梦,不如踏踏实实的学习和工作,不是吗?毛主席教导过我们,好好学习,才能天天
向上。
莫等闲,白了少年头,空悲切,与君共勉。
D:\Program Files\Zend\Zend Studio for Eclipse - 6.0.1\plugins\com.zend.php.phpunit_6.0.1.v20080601\resources\library\PHPUnit\Samples\Money
object getMock($className, [array $methods, [array $arguments, [string $mockClassName, [boolean $callOriginalConstructor, [boolean $callOriginalClone, [boolean $callAutoload]]]]]])
返回一个用于指定的$className的模拟对象(见第 11 章)。缺省地,给定类的所有方法都是模拟的。当提供第二个(可选)参数时,只有名字出现在数组中的方法是模拟的。第三个(可选)参数持有参数数组,用于传入模拟对象的构造函数。第四个(可选)参数可用于为模拟对象指定类名。第五个(可选)参数可用于禁用对原始对象的__construct()方法的调用。第六个(可选)参数可用于禁用对原始对象的__clone()方法的调用。第七个(可选)参数可用于在模拟对象创建期间禁用__autoload()。
object getMock($className, [array $methods, [array $arguments, [string $mockClassName, [boolean $callOriginalConstructor, [boolean $callOriginalClone, [boolean $callAutoload]]]]]])
返回一个用于指定的$className的模拟对象(见第 11 章)。缺省地,给定类的所有方法都是模拟的。当提供第二个(可选)参数时,只有名字出现在数组中的方法是模拟的。第三个(可选)参数持有参数数组,用于传入模拟对象的构造函数。第四个(可选)参数可用于为模拟对象指定类名。第五个(可选)参数可用于禁用对原始对象的__construct()方法的调用。第六个(可选)参数可用于禁用对原始对象的__clone()方法的调用。第七个(可选)参数可用于在模拟对象创建期间禁用__autoload()。
<?php
require_once 'PHPUnit/Framework/TestCase.php';
/**
* 测试从账户中取现
*/
class AccountHolderWithdrawsCashSpec extends PHPUnit_Extensions_Story_TestCase
{
/**
* @scenario
* 场景 1: 帐户有足够的资金
*/
function AccountHasSufficientFunds()
{
$this->given('帐户余额为', 100)
->and('有效的银行卡')
->and('提款机有足够现金')
->when('帐户持有人要求取款', 20)
->then('提款机应该分发', 20)
->and('帐户余额应该为', 80)
->and('应该退还银行卡');
}
// ...
/**
* 处理 given
*/
function runGiven(&$world, $action, $arguments)
{
switch($action)
{
case '帐户余额为':
// 由于 Account 对象必须属于一个 AccountHolder(帐户持有人),
// 因此需要构造一个 AccountHolder 对象
$account_holder = new AccountHolder();
$account_holder->name = 'tester';
// 创建一个 Account 对象,并设置余额为 $arguments[0]
$world['account'] = new Account($account_holder);
$world['account']->balance = $arguments[0];
break;
case '有效的银行卡':
$card = new CreditCard($world['account']);
$card->valid = true;
$world['card'] = $card;
break;
case '提款机有足够现金':
// 确保 ATM 的余额大于帐户余额
$world['atm'] = new ATM();
$world['atm']->balance = $world['account']->balance + 1;
break;
default:
{
return $this->notImplemented($action);
}
}
}
/**
* 处理 when
*/
function runWhen(&$world, $action, $arguments)
{
/**
* 在 when 中调用对象的业务方法
*/
switch($action)
{
case '帐户持有人要求取款':
// 从指定提款机使用指定银行卡取出现金
$world['account']->drawingByATM($world['atm'], $world['card'], $arguments[0]);
break;
default:
return $this->notImplemented($action);
}
}
/**
* 处理 then
*/
function runThen(&$world, $action, $arguments)
{
/**
* 在 then 中验证业务对象的状态是否符合标准
*/
switch($action)
{
case '提款机应该分发':
// 验证提款机的余额
$this->assertEquals($arguments[0], $world['atm']->last_dispense, "提款机应该分发 {$arguments[0]}");
break;
case '帐户余额应该为':
// 验证帐户余额
$this->assertEquals($arguments[0], $world['account']->balance, "帐户余额应该为 {$arguments[0]}");
break;
case '应该退还银行卡':
// 验证银行卡没有被 ATM 锁定
$this->assertTrue($world['card']->isCheckedOut(), '应该退还银行卡');
break;
default:
return $this->notImplemented($action);
}
}
}
?>
require_once 'PHPUnit/Framework/TestCase.php';
/**
* 测试从账户中取现
*/
class AccountHolderWithdrawsCashSpec extends PHPUnit_Extensions_Story_TestCase
{
/**
* @scenario
* 场景 1: 帐户有足够的资金
*/
function AccountHasSufficientFunds()
{
$this->given('帐户余额为', 100)
->and('有效的银行卡')
->and('提款机有足够现金')
->when('帐户持有人要求取款', 20)
->then('提款机应该分发', 20)
->and('帐户余额应该为', 80)
->and('应该退还银行卡');
}
// ...
/**
* 处理 given
*/
function runGiven(&$world, $action, $arguments)
{
switch($action)
{
case '帐户余额为':
// 由于 Account 对象必须属于一个 AccountHolder(帐户持有人),
// 因此需要构造一个 AccountHolder 对象
$account_holder = new AccountHolder();
$account_holder->name = 'tester';
// 创建一个 Account 对象,并设置余额为 $arguments[0]
$world['account'] = new Account($account_holder);
$world['account']->balance = $arguments[0];
break;
case '有效的银行卡':
$card = new CreditCard($world['account']);
$card->valid = true;
$world['card'] = $card;
break;
case '提款机有足够现金':
// 确保 ATM 的余额大于帐户余额
$world['atm'] = new ATM();
$world['atm']->balance = $world['account']->balance + 1;
break;
default:
{
return $this->notImplemented($action);
}
}
}
/**
* 处理 when
*/
function runWhen(&$world, $action, $arguments)
{
/**
* 在 when 中调用对象的业务方法
*/
switch($action)
{
case '帐户持有人要求取款':
// 从指定提款机使用指定银行卡取出现金
$world['account']->drawingByATM($world['atm'], $world['card'], $arguments[0]);
break;
default:
return $this->notImplemented($action);
}
}
/**
* 处理 then
*/
function runThen(&$world, $action, $arguments)
{
/**
* 在 then 中验证业务对象的状态是否符合标准
*/
switch($action)
{
case '提款机应该分发':
// 验证提款机的余额
$this->assertEquals($arguments[0], $world['atm']->last_dispense, "提款机应该分发 {$arguments[0]}");
break;
case '帐户余额应该为':
// 验证帐户余额
$this->assertEquals($arguments[0], $world['account']->balance, "帐户余额应该为 {$arguments[0]}");
break;
case '应该退还银行卡':
// 验证银行卡没有被 ATM 锁定
$this->assertTrue($world['card']->isCheckedOut(), '应该退还银行卡');
break;
default:
return $this->notImplemented($action);
}
}
}
?>
1 范围
本标准规定了养鸡机械设备的一般要求、安全要求和安装技术条件。
本标准适用于养鸡机械设备(包括饮水器、牵引式地面刮板清粪机、孵化机、出雏机、链式和螺旋弹簧式喂料机、蛋鸡鸡笼和笼架、电热育雏保温伞等主要机械设备,以下简称机械设备)的安装和使用。其他禽类机械可参照使用。
2 引用标准
下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。
GB5023 1—1997 额定电压 450/750V及以下聚氯乙烯绝缘电缆 第 1部分:一般要求
GB10395 1—2001 农林拖拉机和机械 安全技术要求 第 1部分:总则
GB10396—1999 农林拖拉机和机械、草坪和园艺动力机械 安全标志和危险图形总则
JB/T7718—1995 鸡用杯式饮水器
JB/T7719—1995 电热育雏保温伞
JB/T7720—1995 鸡用乳头式饮水器
JB/T7725—1995 鸡用牵引式地面刮板清粪机
JB/T7727—1995 鸡用链式喂料机
JB/T7728—1995 鸡用螺旋弹簧式喂料机
JB/T7729—1995 蛋鸡鸡笼和笼架
JB/T9809 1—1999 孵化机 技术条件
JB/T9809 2—1999 孵化机 试验方法 阅读全文
本标准规定了养鸡机械设备的一般要求、安全要求和安装技术条件。
本标准适用于养鸡机械设备(包括饮水器、牵引式地面刮板清粪机、孵化机、出雏机、链式和螺旋弹簧式喂料机、蛋鸡鸡笼和笼架、电热育雏保温伞等主要机械设备,以下简称机械设备)的安装和使用。其他禽类机械可参照使用。
2 引用标准
下列文件中的条款通过本标准的引用而成为本标准的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本标准,然而,鼓励根据本标准达成协议的各方研究是否可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本标准。
GB5023 1—1997 额定电压 450/750V及以下聚氯乙烯绝缘电缆 第 1部分:一般要求
GB10395 1—2001 农林拖拉机和机械 安全技术要求 第 1部分:总则
GB10396—1999 农林拖拉机和机械、草坪和园艺动力机械 安全标志和危险图形总则
JB/T7718—1995 鸡用杯式饮水器
JB/T7719—1995 电热育雏保温伞
JB/T7720—1995 鸡用乳头式饮水器
JB/T7725—1995 鸡用牵引式地面刮板清粪机
JB/T7727—1995 鸡用链式喂料机
JB/T7728—1995 鸡用螺旋弹簧式喂料机
JB/T7729—1995 蛋鸡鸡笼和笼架
JB/T9809 1—1999 孵化机 技术条件
JB/T9809 2—1999 孵化机 试验方法 阅读全文
指定端口进行拷贝:
实践中为了稳妥:
* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
* 例子:
scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/
上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录
======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;
例如:
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/
最简单的应用如下 :
scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2
[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .
可能有用的几个参数 :
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .
-C 使能压缩选项 .
-P 选择端口 . 注意 -p 已经被 rcp 使用 .
-4 强行使用 IPV4 地址 .
-6 强行使用 IPV6 地址 .
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。 [/code]
除了ftp方式复制文件外,大多数人经常会用到scp这个命令,但是很多主机出于安全考虑,更改了ssh默认的连接端口,如改成5198,这时就要用到-P(P是大写)选项,来制定端口
推文件:scp -P 5198 /dir/files user@host:/dir/files
拷贝文件:scp -P 5198 user@host:/dir/files /dir/files
拷贝目录:
拷贝单个文件:
下载远程文档或目录到本地,假如想上传或想下载目录,最好的办法是采用tar压缩一下,是最明智的选择.
scp user@host:/path/file /localpath 假如拷目录就 scp -r user@host:/dirpath /localpath
上传本地目录或文档到远程
或 scp localfile user@host:/dirpath
scp -r localdir user@host:/dirpath
sftp 是个交互式文档传输程式。他类似于 ftp, 但他进行加密传输,比FTP有更高的安全性。下边就简单介绍一下如何远程连接主机,进行文档的上传和下载,连同一些相关操作。
举例,如远程主机的 IP 是 202.206.64.33或是域名
www.hebust.edu.cn
,用户名是 fyt ,在命令行模式下:sftp fyt@202.206.64.33或 fyt@
www.hebust.edu.cn
。回车提示输入密码。进入提示符
sftp>
假如登陆远程机器不是为了上传下载文档,而是要修改远程主机上的某些文档。能够
ssh fyt@202.206.64.33 (其实sftp就是ssh 的一个程式。)
sftp> get /var/www/fuyatao/index.php /home/fuyatao/
_ x `/x9d2dGuest这条语句将从远程主机的 /var/www/fuyatao/目录下将 index.php 下载到本地 /home/fuyatao/目录下。
sftp> put /home/fuyatao/downloads/Linuxgl.pdf /var/www/fuyatao/挨踢圈 -- 技术·资讯·教育·服务·社区;z m9r O&S U6H
这条语句将把本地 /home/fuyatao/downloads/目录下的 linuxgl.pdf文档上传至远程主机/var/www/fuyatao/ 目录下。
您假如不知道远程主机的目录是什么样, pwd命令能够帮您查询远程主机的当前路径。查询本机当前工作目录 lpwd.
改变路径能够用cd ,改变本机路径能够用 lcd;
ls rm rmdir mkdir 这些命令都能够使用。同理调用本机都是加 l , 即 lls lrm.
要离开sftp,用exit 或quit、 bye 均可。周详情况能够查阅 man sftp.
假如觉得在命令行模式下不太方便,能够 sudo apt-get install gftp。在图像界面下操作就简便多了
sftp -oport=2230 dmtsai@192.168.1.12
实践中为了稳妥:
* 复制目录:
* 命令格式:
scp -r local_folder remote_username@remote_ip:remote_folder
或者
scp -r local_folder remote_ip:remote_folder
第1个指定了用户名,命令执行后需要再输入密码;
第2个没有指定用户名,命令执行后需要输入用户名和密码;
* 例子:
scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/
上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录
======
从 远程 复制到 本地
======
从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;
例如:
scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/
最简单的应用如下 :
scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2
[ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .
可能有用的几个参数 :
-v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .
-C 使能压缩选项 .
-P 选择端口 . 注意 -p 已经被 rcp 使用 .
-4 强行使用 IPV4 地址 .
-6 强行使用 IPV6 地址 .
注意两点:
1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
#scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。 [/code]
除了ftp方式复制文件外,大多数人经常会用到scp这个命令,但是很多主机出于安全考虑,更改了ssh默认的连接端口,如改成5198,这时就要用到-P(P是大写)选项,来制定端口
推文件:scp -P 5198 /dir/files user@host:/dir/files
拷贝文件:scp -P 5198 user@host:/dir/files /dir/files
拷贝目录:
scp -P36000 -r /root/tmp root@172.25.39.108:/usr/local/tads/htdocs/
拷贝单个文件:
$ scp -P 3000 trial_a.jpg 404@myip:/home/404
404@myip's password:
trial_a.jpg 100% 89KB 88.8KB/s 00:00
404@myip's password:
trial_a.jpg 100% 89KB 88.8KB/s 00:00
下载远程文档或目录到本地,假如想上传或想下载目录,最好的办法是采用tar压缩一下,是最明智的选择.
scp user@host:/path/file /localpath 假如拷目录就 scp -r user@host:/dirpath /localpath
上传本地目录或文档到远程
或 scp localfile user@host:/dirpath
scp -r localdir user@host:/dirpath
sftp 是个交互式文档传输程式。他类似于 ftp, 但他进行加密传输,比FTP有更高的安全性。下边就简单介绍一下如何远程连接主机,进行文档的上传和下载,连同一些相关操作。
举例,如远程主机的 IP 是 202.206.64.33或是域名
www.hebust.edu.cn
,用户名是 fyt ,在命令行模式下:sftp fyt@202.206.64.33或 fyt@
www.hebust.edu.cn
。回车提示输入密码。进入提示符
sftp>
假如登陆远程机器不是为了上传下载文档,而是要修改远程主机上的某些文档。能够
ssh fyt@202.206.64.33 (其实sftp就是ssh 的一个程式。)
sftp> get /var/www/fuyatao/index.php /home/fuyatao/
_ x `/x9d2dGuest这条语句将从远程主机的 /var/www/fuyatao/目录下将 index.php 下载到本地 /home/fuyatao/目录下。
sftp> put /home/fuyatao/downloads/Linuxgl.pdf /var/www/fuyatao/挨踢圈 -- 技术·资讯·教育·服务·社区;z m9r O&S U6H
这条语句将把本地 /home/fuyatao/downloads/目录下的 linuxgl.pdf文档上传至远程主机/var/www/fuyatao/ 目录下。
您假如不知道远程主机的目录是什么样, pwd命令能够帮您查询远程主机的当前路径。查询本机当前工作目录 lpwd.
改变路径能够用cd ,改变本机路径能够用 lcd;
ls rm rmdir mkdir 这些命令都能够使用。同理调用本机都是加 l , 即 lls lrm.
要离开sftp,用exit 或quit、 bye 均可。周详情况能够查阅 man sftp.
假如觉得在命令行模式下不太方便,能够 sudo apt-get install gftp。在图像界面下操作就简便多了
sftp -oport=2230 dmtsai@192.168.1.12
<?php
error_reporting(E_ALL);
define ('DEF_MC_PREFIX', "app10"); //MC的前缀
include_once '../libs/sinainterface.class.php';
//include_once '../../libs/applogger.class.php';
require_once '../libs/mysqlpdo.class.php';
require_once '../config/db_config1.php';
require_once '../config/commstr1.php';
$test3 = new orderlist(0);
$test3->set_memcache_values(1);
print_r($test3->get_memcache_values(1));
?>
<?php
class OrderList
{
private $uid;//自己的uid号,取好友要用到
private $obj_mc;
private $mcop = true;//假如有了memcache就是true,否则没有true,不写缓存
public $int_all_order_count;
private $int_friend_order_count;
private $return_param;
function __construct($uid)
{
$this->uid = $uid;
$this->s_id = APP_SID;
$this->obj_db = new mysqlpdo ( );
if ($this->mcop) {
$re = $this->ConnectMc ( $mobj );
if ($re) {
$this->obj_mc = $mobj;
} else {
$this->mcop = false;
}
}
}
public function get_memcache_values($int_page)
{
if ($this->mcop)
{
$arr_subject = $this->obj_mc->get ( DEF_MC_PREFIX . APP_SID . '_' . $int_page );
$arr_acount = $this->obj_mc->get(DEF_MC_PREFIX . "_c" .APP_SID);
if ($arr_subject&&$arr_acount)
{
$this->int_all_order_count = $arr_acount ;
return $arr_subject;
}
}else{
//取数据库和调用set_memcache_values()进行赋值
//$this->obj_mc->set(DEF_MC_PREFIX . "_c".APP_SID, $arr_count [0] ['p_count'] , 0 ,60*60*12); //对memcache赋值。
}
}
public function set_memcache_values($int_page)
{
$arr_subject=array("uid" => "1212", "content" => "this ia a test by xiangdong...");
if($this->mcop)
{ //把循环出来的$arr_subject放入MC变量(MC有规则的含$i,以后便于取)
$this->obj_mc->set ( DEF_MC_PREFIX . APP_SID . '_' . $int_page, $arr_subject, 0 ,60 * 60 * 12 );
}
return 1;
}
public function ConnectMc(&$mcobj)
{
global $MC_CONFIG;
echo $MC_CONFIG;
$server = explode ( ":", $MC_CONFIG );
$mcobj = new Memcache ( );
$re = $mcobj->connect ( $server [0], $server [1] );
if (! $re)
return 0;
return 1;
}
}
?>
<?php
?>
error_reporting(E_ALL);
define ('DEF_MC_PREFIX', "app10"); //MC的前缀
include_once '../libs/sinainterface.class.php';
//include_once '../../libs/applogger.class.php';
require_once '../libs/mysqlpdo.class.php';
require_once '../config/db_config1.php';
require_once '../config/commstr1.php';
$test3 = new orderlist(0);
$test3->set_memcache_values(1);
print_r($test3->get_memcache_values(1));
?>
<?php
class OrderList
{
private $uid;//自己的uid号,取好友要用到
private $obj_mc;
private $mcop = true;//假如有了memcache就是true,否则没有true,不写缓存
public $int_all_order_count;
private $int_friend_order_count;
private $return_param;
function __construct($uid)
{
$this->uid = $uid;
$this->s_id = APP_SID;
$this->obj_db = new mysqlpdo ( );
if ($this->mcop) {
$re = $this->ConnectMc ( $mobj );
if ($re) {
$this->obj_mc = $mobj;
} else {
$this->mcop = false;
}
}
}
public function get_memcache_values($int_page)
{
if ($this->mcop)
{
$arr_subject = $this->obj_mc->get ( DEF_MC_PREFIX . APP_SID . '_' . $int_page );
$arr_acount = $this->obj_mc->get(DEF_MC_PREFIX . "_c" .APP_SID);
if ($arr_subject&&$arr_acount)
{
$this->int_all_order_count = $arr_acount ;
return $arr_subject;
}
}else{
//取数据库和调用set_memcache_values()进行赋值
//$this->obj_mc->set(DEF_MC_PREFIX . "_c".APP_SID, $arr_count [0] ['p_count'] , 0 ,60*60*12); //对memcache赋值。
}
}
public function set_memcache_values($int_page)
{
$arr_subject=array("uid" => "1212", "content" => "this ia a test by xiangdong...");
if($this->mcop)
{ //把循环出来的$arr_subject放入MC变量(MC有规则的含$i,以后便于取)
$this->obj_mc->set ( DEF_MC_PREFIX . APP_SID . '_' . $int_page, $arr_subject, 0 ,60 * 60 * 12 );
}
return 1;
}
public function ConnectMc(&$mcobj)
{
global $MC_CONFIG;
echo $MC_CONFIG;
$server = explode ( ":", $MC_CONFIG );
$mcobj = new Memcache ( );
$re = $mcobj->connect ( $server [0], $server [1] );
if (! $re)
return 0;
return 1;
}
}
?>
<?php
?>
参考:http://blog.csdn.net/chinalinuxzend/archive/2007/10/07/1813599.aspx
阅读全文
一男赶集卖猪,天黑遇雨,二十头猪未卖成,甚是苦恼,这时候只好到一农家借宿。
农家只有一少妇,少妇说:家里只一人不便。
(潜在客户说出难题,这不是拒绝,只是个异议,你要理解成机会的信号;)
男:求你了大妹子,给猪一头。
(诱之以利,想获得什么必须先懂付出。)
女:好吧,但家只有一床。
(客户资源有限,不愿意把资源分享给你,是因为你还没有给客户带来足够的利益)
男:我也到床上睡,再给猪一头。
(再接再厉,处处想着客户的利益,你们才能站在同一个阵营)
女:同意。半夜男商女,我到你上面睡,女不肯。
男:给猪两头。女允,要求上去不能动。
(要想跟客户建立更为亲密的关系,你要懂得更大的投入,跟客户得寸进尺是完全能够做到的,关键是你也要让顾客感觉到她是在不断地收获附加值)
少顷,男忍不住,央求动一下,女不肯。
男:动一下给猪两头。女同意。
(客户长期光顾,是因为能够得到长期的利益)
男动了八次停下,女问为何不动?男说猪没了。女小声说:要不我给你猪……天亮后,男吹着口哨赶30头(含少妇家的10头)猪赶集去了.....
(让客户产生依赖,让客户在某种环境下没有选择余地,产生非消费不可的理由,这时候客户就由被动消费到主动消费,就会产生绝对的忠诚,你也是收获利润最为丰厚的时候).
如果觉得不过瘾,请看: 老板让我买了联想手机:【点击进入】
最后,还出了个加强版,在这儿也补上:
管理:卖猪记(加强篇)
一男赶集卖猪,天黑遇雨,二十头猪未卖成,到一农家借宿。
少妇说:家里只一人不便。
男:求你了大妹子,给猪一头。
女:好吧,但家只有一床。
男:我也到床上睡,再给猪一头。
女:同意。
半夜男与女商量,我到你上面睡,女不肯。
男:给猪两头。
女允,要求上去不能动。
少顷,男忍不住,央求动一下,女不肯。
男:动一下给猪两头。女同意。
男动了八次停下,女问为何不动?
男说猪没了。
女小声说:要不我给你猪……
天亮后,男吹着口哨赶30头(含少妇家的10头)猪赶集去了……
哈佛导师评论:要发现用户潜在需求,前期必须引导,培养用户需求,因此产生的投
入是符合发展规律的。
另一男得知此事,决意如法炮制,遂赶集卖猪,天黑遇雨,二十头猪未卖成,到一农
家借宿
少妇说:家里只一人不便。
男:求你了大妹子,给猪一头
女:好吧,但家只有一床。
男:我也到床上睡,再给猪一头。
女:同意。
半夜男商女,我到你上面睡,女不肯。
男:给猪两头。
女允,要求上去不能动。
少顷,男忍不住,央求动一下,女不肯。
男:动一下给猪两头。女同意。
男动了七次停下,女问为何不动?
男说:完事了~~~女:......
天亮后,男低著头赶2头猪赶集去了......
哈佛导师评论:要结合企业自身规模进行谨慎投资,谨防资金链断裂问题
又一男得知此事,决意如法炮制兼吸取教训,遂先用一头猪去换一粒伟哥,事必,天
亮后,男吹着口哨赶38头(含少妇家的18头)猪赶集去了……
哈佛导师评论:企业如果获得金融资本的帮助,自身经营能力将得到倍增。
知道此法男多,伟哥供不应求,逐渐要2头,3头猪换一粒伟哥。
哈佛导师评论:这就是通货膨胀。
当伟哥价格涨到16头一粒的时候,哈佛导师评论:该男已经进入边际成本,除了拥有对
自身能力的自信和未来良好愿望以外,实际现猪流已经为零。
但换猪男越来越多,卖伟哥的决定,扩展生产能力,推出一种次级伟哥,如果你缺一
头猪,只要你承诺可以到该女房中一夜,就可以先借,事成后补交猪款,这个方法大
大促进了伟哥销售。
哈佛导师评论:这就是贷款,让企业可以根据未来的收益选择借支流动资金
伟哥专卖店后来在即使你一头猪都没有,只要你承诺可以到该女房中一夜,就可以先
借,事成后补交猪款。
哈佛导师评论:这就是金融创新,让现在的人花未来的钱,反正等你老了未来的钱你
也花不动。
消息一出,换猪男越来越多,有人找伟哥专卖店,这个项目太好了,我们把它变成优
质基金,对外销售债卷,你们也就可以分享我的收益,如何?
结果伟哥专卖店觉得甚好,于是该公司把换猪男分三类,一类是拿现猪换的,一类是
一部分现猪贷的,一类是完全没有现猪借的,发行三种债卷。大家踊跃而上。纷纷购
买伟哥专卖店的债卷,伟哥专卖店生意太好,就把债卷销售外包给另外一家公司运
作,该公司也一并大发其财,公司越做越大,甚至可以脱离实际伟哥销售情况来发
行,给自己和伟哥专卖店带来巨大的现金收益。
哈佛导师评论:这就是专业的人做专业的事,从实体经营到资本运作,经济进入了更
高的层次。
为了防止自己债卷未来有损失,该公司决定给它买上保险,这样债卷销售就更容易,
因为一旦债卷出现问题,还可以获得保险公司的赔付,哇,债券公司销售这下子太好
了,保险公司也获得巨大平白无故的保险收入。
哈佛导师评论:这就是风险对冲,策略联盟,提高了企业的抗风险能力,也保护了消
费者利益。
换猪男太多,排长队等待,该女无法承受,说老娘不干了,我搬家,一时间有无数拥
有伟哥的欠猪男。
哈佛导师评论:这是个别现象,属于市场的正常波动,不会影响整个经济。
结果该女迟迟不肯搬回。一部分欠猪男没有收入,只好赖帐,结果大量债卷到期无法
换现猪吃,债卷公司一看,一粒伟哥16头猪,这哪里还得起,宣布倒闭
哈佛导师评论:这是次贷危机,不会影响整个金融行业。
哪里晓得债卷公司还把债卷上了保险,保险公司一看,这哪里赔得起,于是也宣布要
倒闭。
哈佛导师评论:这是金融危机,还不会影响整个实体经济。
后文:据说该女已搬到中国定居。
农家只有一少妇,少妇说:家里只一人不便。
(潜在客户说出难题,这不是拒绝,只是个异议,你要理解成机会的信号;)
男:求你了大妹子,给猪一头。
(诱之以利,想获得什么必须先懂付出。)
女:好吧,但家只有一床。
(客户资源有限,不愿意把资源分享给你,是因为你还没有给客户带来足够的利益)
男:我也到床上睡,再给猪一头。
(再接再厉,处处想着客户的利益,你们才能站在同一个阵营)
女:同意。半夜男商女,我到你上面睡,女不肯。
男:给猪两头。女允,要求上去不能动。
(要想跟客户建立更为亲密的关系,你要懂得更大的投入,跟客户得寸进尺是完全能够做到的,关键是你也要让顾客感觉到她是在不断地收获附加值)
少顷,男忍不住,央求动一下,女不肯。
男:动一下给猪两头。女同意。
(客户长期光顾,是因为能够得到长期的利益)
男动了八次停下,女问为何不动?男说猪没了。女小声说:要不我给你猪……天亮后,男吹着口哨赶30头(含少妇家的10头)猪赶集去了.....
(让客户产生依赖,让客户在某种环境下没有选择余地,产生非消费不可的理由,这时候客户就由被动消费到主动消费,就会产生绝对的忠诚,你也是收获利润最为丰厚的时候).
如果觉得不过瘾,请看: 老板让我买了联想手机:【点击进入】
最后,还出了个加强版,在这儿也补上:
管理:卖猪记(加强篇)
一男赶集卖猪,天黑遇雨,二十头猪未卖成,到一农家借宿。
少妇说:家里只一人不便。
男:求你了大妹子,给猪一头。
女:好吧,但家只有一床。
男:我也到床上睡,再给猪一头。
女:同意。
半夜男与女商量,我到你上面睡,女不肯。
男:给猪两头。
女允,要求上去不能动。
少顷,男忍不住,央求动一下,女不肯。
男:动一下给猪两头。女同意。
男动了八次停下,女问为何不动?
男说猪没了。
女小声说:要不我给你猪……
天亮后,男吹着口哨赶30头(含少妇家的10头)猪赶集去了……
哈佛导师评论:要发现用户潜在需求,前期必须引导,培养用户需求,因此产生的投
入是符合发展规律的。
另一男得知此事,决意如法炮制,遂赶集卖猪,天黑遇雨,二十头猪未卖成,到一农
家借宿
少妇说:家里只一人不便。
男:求你了大妹子,给猪一头
女:好吧,但家只有一床。
男:我也到床上睡,再给猪一头。
女:同意。
半夜男商女,我到你上面睡,女不肯。
男:给猪两头。
女允,要求上去不能动。
少顷,男忍不住,央求动一下,女不肯。
男:动一下给猪两头。女同意。
男动了七次停下,女问为何不动?
男说:完事了~~~女:......
天亮后,男低著头赶2头猪赶集去了......
哈佛导师评论:要结合企业自身规模进行谨慎投资,谨防资金链断裂问题
又一男得知此事,决意如法炮制兼吸取教训,遂先用一头猪去换一粒伟哥,事必,天
亮后,男吹着口哨赶38头(含少妇家的18头)猪赶集去了……
哈佛导师评论:企业如果获得金融资本的帮助,自身经营能力将得到倍增。
知道此法男多,伟哥供不应求,逐渐要2头,3头猪换一粒伟哥。
哈佛导师评论:这就是通货膨胀。
当伟哥价格涨到16头一粒的时候,哈佛导师评论:该男已经进入边际成本,除了拥有对
自身能力的自信和未来良好愿望以外,实际现猪流已经为零。
但换猪男越来越多,卖伟哥的决定,扩展生产能力,推出一种次级伟哥,如果你缺一
头猪,只要你承诺可以到该女房中一夜,就可以先借,事成后补交猪款,这个方法大
大促进了伟哥销售。
哈佛导师评论:这就是贷款,让企业可以根据未来的收益选择借支流动资金
伟哥专卖店后来在即使你一头猪都没有,只要你承诺可以到该女房中一夜,就可以先
借,事成后补交猪款。
哈佛导师评论:这就是金融创新,让现在的人花未来的钱,反正等你老了未来的钱你
也花不动。
消息一出,换猪男越来越多,有人找伟哥专卖店,这个项目太好了,我们把它变成优
质基金,对外销售债卷,你们也就可以分享我的收益,如何?
结果伟哥专卖店觉得甚好,于是该公司把换猪男分三类,一类是拿现猪换的,一类是
一部分现猪贷的,一类是完全没有现猪借的,发行三种债卷。大家踊跃而上。纷纷购
买伟哥专卖店的债卷,伟哥专卖店生意太好,就把债卷销售外包给另外一家公司运
作,该公司也一并大发其财,公司越做越大,甚至可以脱离实际伟哥销售情况来发
行,给自己和伟哥专卖店带来巨大的现金收益。
哈佛导师评论:这就是专业的人做专业的事,从实体经营到资本运作,经济进入了更
高的层次。
为了防止自己债卷未来有损失,该公司决定给它买上保险,这样债卷销售就更容易,
因为一旦债卷出现问题,还可以获得保险公司的赔付,哇,债券公司销售这下子太好
了,保险公司也获得巨大平白无故的保险收入。
哈佛导师评论:这就是风险对冲,策略联盟,提高了企业的抗风险能力,也保护了消
费者利益。
换猪男太多,排长队等待,该女无法承受,说老娘不干了,我搬家,一时间有无数拥
有伟哥的欠猪男。
哈佛导师评论:这是个别现象,属于市场的正常波动,不会影响整个经济。
结果该女迟迟不肯搬回。一部分欠猪男没有收入,只好赖帐,结果大量债卷到期无法
换现猪吃,债卷公司一看,一粒伟哥16头猪,这哪里还得起,宣布倒闭
哈佛导师评论:这是次贷危机,不会影响整个金融行业。
哪里晓得债卷公司还把债卷上了保险,保险公司一看,这哪里赔得起,于是也宣布要
倒闭。
哈佛导师评论:这是金融危机,还不会影响整个实体经济。
后文:据说该女已搬到中国定居。
1:Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require的所有文件
总结:在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用,
//再看看下面一例
2:global问题解析:
question:我在config.inc.php中定义了一些变量($a),在别的文件中函数外部 include("config.inc.php"),函数内部需要使用这些变量$a,如果没有声明的话,echo $a是打印不出来任何东西的。因此声明global $a,但是有很多函数和很多变量,总不能不断重复的这样声明吧?有什么好的解决办法,请指点。
answer1:先在config.inc.php里定义常量:define(常量名,常量值)
再在其他需要用到的地方require 'config.inc.php',
然后就能在这个文件里直接使用这个常量了。
answer2:我也有个办法,就是定义数组,如$x[a],$x,那样就只要声明global $x一个了。
answer3:我试了你的这个方法,不行啊。
answer4:改你的php.ini文件。
设置global 为 on
$a=123;
function aa()
{
Global $a; //如果不把$a定义为global变量,函数体内是不能访问$a的
echo $a;
}
aa();
function aa()
{
Global $a; //如果不把$a定义为global变量,函数体内是不能访问$a的
echo $a;
}
aa();
总结:在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用,
$glpbal $a;
$a=123;
function f()
{
echo $a; //错误,
}
$a=123;
function f()
{
echo $a; //错误,
}
//再看看下面一例
function f()
{
global $a;
$a=123;
}
f();
echo $a; //正确,可以使用
{
global $a;
$a=123;
}
f();
echo $a; //正确,可以使用
2:global问题解析:
question:我在config.inc.php中定义了一些变量($a),在别的文件中函数外部 include("config.inc.php"),函数内部需要使用这些变量$a,如果没有声明的话,echo $a是打印不出来任何东西的。因此声明global $a,但是有很多函数和很多变量,总不能不断重复的这样声明吧?有什么好的解决办法,请指点。
answer1:先在config.inc.php里定义常量:define(常量名,常量值)
再在其他需要用到的地方require 'config.inc.php',
然后就能在这个文件里直接使用这个常量了。
answer2:我也有个办法,就是定义数组,如$x[a],$x,那样就只要声明global $x一个了。
answer3:我试了你的这个方法,不行啊。
answer4:改你的php.ini文件。
设置global 为 on