加密日志
女人是做电子罗盘的。每天研究陀螺仪,水平仪,角度传感器,加速度传感器喝倾角传感器。这天突接到通知,需要再加两个小时的班。女人给男人打电话,告诉他可能得晚一点儿回家。男人说,嗯,我也刚下班,在路上,你大约什么时间回来?女人刚想告诉他还得两个小时,手机就没电了。女人想找个公用电话,再想想还是算了。老夫老妻了,儿子都读了中学,还用如此浪漫?
终于下了班,女人匆匆往家赶。已经很晚了,她想这时男人一定候在客厅,把空调开得很暖。餐桌上应该还摆了温热的饭菜,肯定有女人喜欢的那道。想到这里,女人笑了,加快了脚下的步子。却突然,在离家二十多米远的地方,她看到了男人。
男人站在黑暗里,只是一个模糊的灰色轮廓。但她知道那是男人。女人对男人太熟悉了,熟悉到可以辨认出他的一根发丝,一个喷嚏,一缕气味,甚至一个影子。女人轻声说,嗨。男人就走过来,他说怎么现在才回来?好像男人正发着抖。天很冷,夜风把人的衣服,一点一点地刮透。
女人说你在这里干什么?男人说有条沟……记得早晨还没有沟呢……可能在抢修煤气管道……他们也不亮个警示灯……你得从这边绕过来。男人领着女人,小心翼翼地绕过那条沟。女人说你等在这里,就为了告诉我有一条沟?男人说是。这么冷的天,万一摔一跤,可不是好玩的。男人低头上了楼梯,声控灯忽明忽暗。突然,女人觉得男人像一个热恋中的男孩,寒风中,正忐忑不安地等着他的心上人。
进了屋子,男人急急地去开空调,急急地从冰箱里拿出冻鱼冻肉。女人愣一下,她说你一直没有回家?男人说是啊。女人说下了班,你就一直等在那里?男人说是啊,本想打电话告诉你小心点,可是你手机没电了。女人说你在那里等了两个多小时?怎么不先回家取取暖?男人说万一我回来的时候,你也刚好回家呢?沟那么深,又没亮个警示灯……晚饭想吃红烧肉吗?女人说从那里回趟家添一件衣服,不过两三分钟,你怕我在这两三分钟内回来,就一直不敢离开?男人说是啊是啊……吃不吃红烧肉?
女人有些感动。好像男人并不像热恋中的小男孩。他是一个深沉细心的父亲。男人的鼻子红红的,突然打一个响亮的喷嚏。女人走过去,从男人的手上抢过围裙。突然她发现男人咧了嘴巴,眉头轻轻地皱。女人忙撸开他的裤腿,她发现男人的膝盖鲜血淋漓。女人说你快去歇着,找个创可贴贴上。男人笑笑说不用了,两个多小时,早已经长痂了……我说你到底吃不吃红烧肉?
爱情是什么呢?应该不是那种年年月月天天时时分分秒秒的相守吧?其实真正动人的爱情,只是在某一个时刻,只是在某一个最微小的时刻,一秒钟,都不敢离开。
终于下了班,女人匆匆往家赶。已经很晚了,她想这时男人一定候在客厅,把空调开得很暖。餐桌上应该还摆了温热的饭菜,肯定有女人喜欢的那道。想到这里,女人笑了,加快了脚下的步子。却突然,在离家二十多米远的地方,她看到了男人。
男人站在黑暗里,只是一个模糊的灰色轮廓。但她知道那是男人。女人对男人太熟悉了,熟悉到可以辨认出他的一根发丝,一个喷嚏,一缕气味,甚至一个影子。女人轻声说,嗨。男人就走过来,他说怎么现在才回来?好像男人正发着抖。天很冷,夜风把人的衣服,一点一点地刮透。
女人说你在这里干什么?男人说有条沟……记得早晨还没有沟呢……可能在抢修煤气管道……他们也不亮个警示灯……你得从这边绕过来。男人领着女人,小心翼翼地绕过那条沟。女人说你等在这里,就为了告诉我有一条沟?男人说是。这么冷的天,万一摔一跤,可不是好玩的。男人低头上了楼梯,声控灯忽明忽暗。突然,女人觉得男人像一个热恋中的男孩,寒风中,正忐忑不安地等着他的心上人。
进了屋子,男人急急地去开空调,急急地从冰箱里拿出冻鱼冻肉。女人愣一下,她说你一直没有回家?男人说是啊。女人说下了班,你就一直等在那里?男人说是啊,本想打电话告诉你小心点,可是你手机没电了。女人说你在那里等了两个多小时?怎么不先回家取取暖?男人说万一我回来的时候,你也刚好回家呢?沟那么深,又没亮个警示灯……晚饭想吃红烧肉吗?女人说从那里回趟家添一件衣服,不过两三分钟,你怕我在这两三分钟内回来,就一直不敢离开?男人说是啊是啊……吃不吃红烧肉?
女人有些感动。好像男人并不像热恋中的小男孩。他是一个深沉细心的父亲。男人的鼻子红红的,突然打一个响亮的喷嚏。女人走过去,从男人的手上抢过围裙。突然她发现男人咧了嘴巴,眉头轻轻地皱。女人忙撸开他的裤腿,她发现男人的膝盖鲜血淋漓。女人说你快去歇着,找个创可贴贴上。男人笑笑说不用了,两个多小时,早已经长痂了……我说你到底吃不吃红烧肉?
爱情是什么呢?应该不是那种年年月月天天时时分分秒秒的相守吧?其实真正动人的爱情,只是在某一个时刻,只是在某一个最微小的时刻,一秒钟,都不敢离开。
<?php
/**
* 倒库程序雏形,将space的数据分析后导入到现有数据库中
*
*/
class import_export
{
private $dsn="";
private $user="";
private $password="";
private $pdo="";
public function import_export($dsn,$user,$password)
{
$this->dsn = $dsn;
$this->user = $user;
$this->password = $password;
$this->pdo = new PDO($this->dsn, $this->user, $this->password);
}
public function fetch_result($query)
{
$rs = $this->pdo->query($query);
$result_arr = $rs->fetchAll();
return $result_arr;
}
public function insert($insert_sql)
{
$count = $this->pdo->exec($insert_sql);
if($count)
{
return true;
}else{
return false;
}
}
public function get_pdo_obj()
{
return $this->db;
}
public function lastInsertId()
{
return $this->pdo->lastInsertId();
}
}
?>
<?php
$time_begin = time();
$conf_array = array("db_host"=>"localhost","port"=>"3306","dbname"=>"public","user"=>"root","password"=>"");
$dsn = "mysql:host={$conf_array['db_host']};port={$conf_array['port']};dbname={$conf_array['dbname']}";
$user = $conf_array['user'];
$password = $conf_array['password'];
$pdo = new import_export($dsn,$user,$password);
for($i=1;$i<100000000000;$i++)
{
$time_end = time();
if($time_end - $time_begin >= 60)
{
exit;
}
$insert_sql = "INSERT INTO `information` ( `infoid` , `group` , `productid` , `connection` , `invitetype` , `content` , `addition` ) VALUES (NULL , '1', '2', '2', '1', '的的的的的的的的的的的的的的的的的的', '的的的的的的的的的的的的的的的的的的的的的的的的');"; //插入数据库的sql语句
$import_export2 = $pdo->insert($insert_sql);
$insert_id = $pdo->lastInsertId();
$insert_sql2 = "INSERT INTO `relation` ( `id` , `owneruid` , `otheruid` , `type` , `status` , `infoid` , `ctime` , `uniq_key` ) VALUES (NULL , '1', '2', '1', '11', $insert_id, '2008-10-02 20:30:21', '45646546456456456456456456456456465');"; //插入数据库的sql语句
$import_export2 = $pdo->insert($insert_sql2);
}
?>
阅读全文
查询当前数据库有哪些存储过程:
创建一个简单的存储过程
5 存储过程创建完毕,看怎么调用它
显示结果
删除存储过程:
存储过程实例:
PHP调用存储过程:
返回单个数据:
1.1:创建MySQL存储过程:
1.2:PHP调用:
返回多个数据:
2.1:创建MySQL存储过程:
2.2:PHP调用:
P.S.:以上代码执行通过环境 PHP 5.X.X + MySQL 5.X.X
下面就可以正常使用了,以下是例子程序:
mysql>show procedure status where Db='test'
创建一个简单的存储过程
mysql>create procedure hi() select 'hello';
5 存储过程创建完毕,看怎么调用它
mysql>call hi();
显示结果
mysql> call hi();
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
+-------+
| hello |
+-------+
| hello |
+-------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
删除存储过程:
DROP PROCEDURE hi;
存储过程实例:
DELIMITER ||
CREATE PROCEDURE showdb( v_offset int, v_pagesize int )
BEGIN
SET @stmt = concat("SELECT * FROM `comment` ORDER BY id DESC LIMIT ",v_offset,",",v_pagesize);
PREPARE s1 FROM @stmt;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END||
DELIMITER ;
CREATE PROCEDURE showdb( v_offset int, v_pagesize int )
BEGIN
SET @stmt = concat("SELECT * FROM `comment` ORDER BY id DESC LIMIT ",v_offset,",",v_pagesize);
PREPARE s1 FROM @stmt;
EXECUTE s1;
DEALLOCATE PREPARE s1;
END||
DELIMITER ;
PHP调用存储过程:
返回单个数据:
1.1:创建MySQL存储过程:
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`proc_test` $$
CREATE PROCEDURE `test`.`proc_test` (out a int)
BEGIN
select count(*) into a from tblname;
END $$
DELIMITER ;
DROP PROCEDURE IF EXISTS `test`.`proc_test` $$
CREATE PROCEDURE `test`.`proc_test` (out a int)
BEGIN
select count(*) into a from tblname;
END $$
DELIMITER ;
1.2:PHP调用:
$db->query("CALL test.proc_test(@a)");
$res = $db->query("select @a");
$row = $res->fetch_array();
echo $row['@a'];
$res = $db->query("select @a");
$row = $res->fetch_array();
echo $row['@a'];
返回多个数据:
2.1:创建MySQL存储过程:
DELIMITER $$
DROP PROCEDURE IF EXISTS `test`.`proc_test` $$
CREATE PROCEDURE `test`.`proc_test` ()
BEGIN
select * from tbl_name;
END $$
DELIMITER ;
DROP PROCEDURE IF EXISTS `test`.`proc_test` $$
CREATE PROCEDURE `test`.`proc_test` ()
BEGIN
select * from tbl_name;
END $$
DELIMITER ;
2.2:PHP调用:
$res=$db->query("CALL test.proc_test()");
while ($arr=$res->fetch_array())
{
echo $arr["Field"] ."<br/>";
}
while ($arr=$res->fetch_array())
{
echo $arr["Field"] ."<br/>";
}
P.S.:以上代码执行通过环境 PHP 5.X.X + MySQL 5.X.X
1 define('CLIENT_MULTI_RESULTS', 131072);
2
3 $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());
2
3 $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());
下面就可以正常使用了,以下是例子程序:
1 <?php
2 define('CLIENT_MULTI_RESULTS', 131072);
3
4 $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());
5 mysql_select_db("vs") or die("Could not select database");
6 ?>
7
8 <?php
9 $result = mysql_query("call get_news_from_class_id(2)") or die("Query failed:" .mysql_error());
10 while($row = mysql_fetch_array($result, MYSQL_ASSOC))
11 {
12 $line = '<tr><td><a target = _blank href=\''.$row["url"].'\'>'.$row["title"].'('.$row["page_time"].')'.'</a></td></tr>';
14 echo $line;
15 printf("\n");
16
17 }
18 mysql_free_result($result);
19 ?>
20
21 <?php
22 mysql_close($link);
23 ?>
2 define('CLIENT_MULTI_RESULTS', 131072);
3
4 $link = mysql_connect("127.0.0.1", "root", "",1,CLIENT_MULTI_RESULTS) or die("Could not connect: ".mysql_error());
5 mysql_select_db("vs") or die("Could not select database");
6 ?>
7
8 <?php
9 $result = mysql_query("call get_news_from_class_id(2)") or die("Query failed:" .mysql_error());
10 while($row = mysql_fetch_array($result, MYSQL_ASSOC))
11 {
12 $line = '<tr><td><a target = _blank href=\''.$row["url"].'\'>'.$row["title"].'('.$row["page_time"].')'.'</a></td></tr>';
14 echo $line;
15 printf("\n");
16
17 }
18 mysql_free_result($result);
19 ?>
20
21 <?php
22 mysql_close($link);
23 ?>
最近在做一个小东西的时候,发现mysql有last_insert_id()这个函数
它的用法如下:记录下来备忘
它必需紧跟在insert 语句执行之后。
//执行insert语句先
$sql="insert into table (name1,name2,...) values('value1','values'...)";
dbx_query($db_link,$sql);
//找出最后一次插入记录的id
$select="select last_insert_id() ";
$result=dbx_query($db_link,$select);
$last_id=$result->data[0][0];
ps: $last_id=mysql_insert_id();
mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id() 的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。
具体的请看php手册: mysql_insert_id
来自:http://blog.csdn.net/kemy88/article/details/1108524
_____________________________________________________________________________
show table status\G
show create table message;
LAST_INSERT_ID
自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里
The ID that was generated is maintained in the server on a per-connection basis.
LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。
可以用 SELECT LAST_INSERT_ID(); 查询LAST_INSERT_ID的值.
Important: If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only.
使用单INSERT语句插入多条记录, LAST_INSERT_ID只返回插入的第一条记录产生的值. 比如
ID 2 是在插入第一条记录aaaa 时产生的.
LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。
一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。
但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。
这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。
mysql的last_insert_id()不可靠 Mysql的API有个很有意义的函数last_insert_id()。这个函数的作用是,针对auto_increment字段,返回给定的 数据库链接,上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定数据库链接,则使用上一个打开的连接。 很多人质疑last_insert_id()是否是可靠的,以前我也犹豫过。 事实上的结果是mysql_insert_id决不会取错。首先做个测试,在mysql_query("insert.....);之后立刻sleep(1100),其间再做些其他的insert. 然后发现在mysql_insert_id取的值都不会和其他的冲突。 看了半天mysql的代码。mysql_insert_id是这么定义的
my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql) { return mysql->;last_used_con->;insert_id; }
参考:http://zhaohe162.blog.163.com/blog/static/38216797201122411193745/
它的用法如下:记录下来备忘
它必需紧跟在insert 语句执行之后。
//执行insert语句先
$sql="insert into table (name1,name2,...) values('value1','values'...)";
dbx_query($db_link,$sql);
//找出最后一次插入记录的id
$select="select last_insert_id() ";
$result=dbx_query($db_link,$select);
$last_id=$result->data[0][0];
ps: $last_id=mysql_insert_id();
mysql_insert_id() 将 MySQL 内部的 C API 函数 mysql_insert_id() 的返回值转换成 long(PHP 中命名为 int)。如果 AUTO_INCREMENT 的列的类型是 BIGINT,则 mysql_insert_id() 返回的值将不正确。可以在 SQL 查询中用 MySQL 内部的 SQL 函数 LAST_INSERT_ID() 来替代。
具体的请看php手册: mysql_insert_id
来自:http://blog.csdn.net/kemy88/article/details/1108524
_____________________________________________________________________________
show table status\G
show create table message;
LAST_INSERT_ID
自动返回最后一个 INSERT 或 UPDATE 操作为 AUTO_INCREMENT 列设置的第一个发生的值. 参考这里
The ID that was generated is maintained in the server on a per-connection basis.
LAST_INSERT_ID是基于单个connection的, 不可能被其它的客户端连接改变。
可以用 SELECT LAST_INSERT_ID(); 查询LAST_INSERT_ID的值.
Important: If you insert multiple rows using a single INSERT statement, LAST_INSERT_ID() returns the value generated for the first inserted row only.
使用单INSERT语句插入多条记录, LAST_INSERT_ID只返回插入的第一条记录产生的值. 比如
1. mysql> INSERT INTO t VALUES (NULL, 'aaaa'), (NULL, 'bbbb'), (NULL, 'cccc');
2. mysql> SELECT * FROM t;
3. +----+------+
4. | id | name |
5. +----+------+
6. | 1 | Bob |
7. | 2 | aaaa |
8. | 3 | bbbb |
9. | 4 | cccc |
10. +----+------+
11. mysql> SELECT LAST_INSERT_ID();
12. +------------------+
13. | LAST_INSERT_ID() |
14. +------------------+
15. | 2 |
16. +------------------+
2. mysql> SELECT * FROM t;
3. +----+------+
4. | id | name |
5. +----+------+
6. | 1 | Bob |
7. | 2 | aaaa |
8. | 3 | bbbb |
9. | 4 | cccc |
10. +----+------+
11. mysql> SELECT LAST_INSERT_ID();
12. +------------------+
13. | LAST_INSERT_ID() |
14. +------------------+
15. | 2 |
16. +------------------+
ID 2 是在插入第一条记录aaaa 时产生的.
LAST_INSERT_ID 是与table无关的,如果向表a插入数据后,再向表b插入数据,LAST_INSERT_ID会改变。
一般情况下获取刚插入的数据的id,使用select max(id) from table 是可以的。
但在多线程情况下,就不行了。在多用户交替插入数据的情况下max(id)显然不能用。
这就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。
mysql的last_insert_id()不可靠 Mysql的API有个很有意义的函数last_insert_id()。这个函数的作用是,针对auto_increment字段,返回给定的 数据库链接,上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定数据库链接,则使用上一个打开的连接。 很多人质疑last_insert_id()是否是可靠的,以前我也犹豫过。 事实上的结果是mysql_insert_id决不会取错。首先做个测试,在mysql_query("insert.....);之后立刻sleep(1100),其间再做些其他的insert. 然后发现在mysql_insert_id取的值都不会和其他的冲突。 看了半天mysql的代码。mysql_insert_id是这么定义的
my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql) { return mysql->;last_used_con->;insert_id; }
参考:http://zhaohe162.blog.163.com/blog/static/38216797201122411193745/
语法如下:
alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
drop index shili on tpsc ;
来源URL:http://www.isstudy.com/mysql/440.html
实际实践如下:
alter table `relation` drop index gots; alter table `relation` drop index gots;
alter table `relation` add index gots(`group`,`owneruid`, `type`,`status`);
create table index_analyse_xiangdong select * from relation limit 21000;
测试用数据表结构如下:
--
1.PRIMARY KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE (
`column` ) //这个不靠谱
3.INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
5.多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
可以用sql强制使用或不使用索引
IGNORE INDEX (invitetype)
USE INDEX (invitetype)
如
select count from p2p_info1 IGNORE INDEX (invitetype) where invitetype="111";
alter table table_name add index index_name (column_list) ;
alter table table_name add unique (column_list) ;
alter table table_name add primary key (column_list) ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
drop index shili on tpsc ;
来源URL:http://www.isstudy.com/mysql/440.html
实际实践如下:
alter table `relation` drop index gots; alter table `relation` drop index gots;
alter table `relation` add index gots(`group`,`owneruid`, `type`,`status`);
create table index_analyse_xiangdong select * from relation limit 21000;
show index from p2p_main; //p2p_main 是表名称
mysql> show index from p2p_main;
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| p2p_main | 0 | PRIMARY | 1 | id | A | 3052412 | NULL | NULL | | BTREE | |
| p2p_main | 1 | oweneruid | 1 | oweneruid | A | 610482 | NULL | NULL | | BTREE | |
| p2p_main | 1 | oweneruid_2 | 1 | oweneruid | A | 610482 | NULL | NULL | | BTREE | |
| p2p_main | 1 | oweneruid_2 | 2 | otheruid | A | 1017470 | NULL | NULL | | BTREE | |
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
mysql> show index from p2p_main;
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| p2p_main | 0 | PRIMARY | 1 | id | A | 3052412 | NULL | NULL | | BTREE | |
| p2p_main | 1 | oweneruid | 1 | oweneruid | A | 610482 | NULL | NULL | | BTREE | |
| p2p_main | 1 | oweneruid_2 | 1 | oweneruid | A | 610482 | NULL | NULL | | BTREE | |
| p2p_main | 1 | oweneruid_2 | 2 | otheruid | A | 1017470 | NULL | NULL | | BTREE | |
+----------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
alter table `p2p_main` add index oweneruid_2(oweneruid ,otheruid );//建立索引,括号里面不能有逗号和单引号
alter table `p2p_main` drop index oweneruid_2; //删除索引:是建立在oweneruid 和otheruid 的联合索引
alter table `p2p_main` drop index oweneruid_2; //删除索引:是建立在oweneruid 和otheruid 的联合索引
explain SELECT SQL_NO_CACHE * FROM `mytest` force index(rstatus,uid) WHERE rstatus =1 AND uid IN ( 3,2,7) \G;
测试用数据表结构如下:
--
-- 表的结构 `p2p_info`
--
CREATE TABLE IF NOT EXISTS `p2p_info` (
`infoid` int(10) unsigned NOT NULL auto_increment,
`group` enum('1','2') collate utf8_bin NOT NULL,
`productid` char(32) collate utf8_bin NOT NULL,
`connection` enum('11','22') collate utf8_bin NOT NULL,
`invitetype` enum('111','222') collate utf8_bin NOT NULL,
`content` text collate utf8_bin NOT NULL,
`addition` text collate utf8_bin NOT NULL,
PRIMARY KEY (`infoid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- 表的结构 `p2p_main`
--
CREATE TABLE IF NOT EXISTS `p2p_main` (
`id` int(10) unsigned NOT NULL auto_increment,
`oweneruid` int(11) NOT NULL,
`otheruid` int(11) NOT NULL,
`type` enum('1','2') NOT NULL default '1',
`status` enum('11','22') NOT NULL default '11',
`infoid` int(11) NOT NULL,
`ctime` datetime NOT NULL,
`uniq_key` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
--
CREATE TABLE IF NOT EXISTS `p2p_info` (
`infoid` int(10) unsigned NOT NULL auto_increment,
`group` enum('1','2') collate utf8_bin NOT NULL,
`productid` char(32) collate utf8_bin NOT NULL,
`connection` enum('11','22') collate utf8_bin NOT NULL,
`invitetype` enum('111','222') collate utf8_bin NOT NULL,
`content` text collate utf8_bin NOT NULL,
`addition` text collate utf8_bin NOT NULL,
PRIMARY KEY (`infoid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=1 ;
-- --------------------------------------------------------
--
-- 表的结构 `p2p_main`
--
CREATE TABLE IF NOT EXISTS `p2p_main` (
`id` int(10) unsigned NOT NULL auto_increment,
`oweneruid` int(11) NOT NULL,
`otheruid` int(11) NOT NULL,
`type` enum('1','2') NOT NULL default '1',
`status` enum('11','22') NOT NULL default '11',
`infoid` int(11) NOT NULL,
`ctime` datetime NOT NULL,
`uniq_key` varchar(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
1.PRIMARY KEY(主键索引)
mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
2.UNIQUE(唯一索引)
mysql>ALTER TABLE `table_name` ADD UNIQUE (
`column` ) //这个不靠谱
alter table `index_analyse_xiangdong` ADD UNIQUE key id4(id);
alter table index_analyse_xiangdong drop index id4;
alter table index_analyse_xiangdong drop index id4;
3.INDEX(普通索引)
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
4.FULLTEXT(全文索引)
mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column` )
5.多列索引
mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )
可以用sql强制使用或不使用索引
IGNORE INDEX (invitetype)
USE INDEX (invitetype)
如
select count from p2p_info1 IGNORE INDEX (invitetype) where invitetype="111";
建表:
查看引擎状态:
查看表类型(存储引擎): SHOW TABLE STATUS FROM test;
SHOW variables like "have_%"
用innodb引擎。使用方法是create table xxx()engine=innodb;如果想所有建立的表格都用innodb引擎,可以把“default-storage- engine=INNODB”加到/etc/mysql/my.cnf(位置可能不同)。设完之后就可以用“show engines;”检查是否设置好。不过据说该设置在5.0.22下可能无效。
http://www.geekso.com/post/124/
事务处理:
ySQL 总是启动自动提交你运行的每个 SQL 语句的自动提交(autocommit)模式创建每的新连接。为了使用事务,可以使用 SQL 命令 SET AUTOCOMMIT = 0 关闭自动提交(autocommit)开关,使用 COMMIT 和 ROLLBACK 来提交事务和回滚事务。如果你想保留 autocommit 开关打开,你可以将事务放入 BEGIN 和 COMMIT 或 ROLLBACK之间。
heikki@hundin:~/mysql/client> mysql test
CREATE TABLE customer (id INT NOT NULL, PRIMARY KEY (id)) ENGINE=INNODB;
ALTER TABLE et ENGINE = INNODB;.查看引擎状态:
show engines;
查看表类型(存储引擎): SHOW TABLE STATUS FROM test;
SHOW variables like "have_%"
用innodb引擎。使用方法是create table xxx()engine=innodb;如果想所有建立的表格都用innodb引擎,可以把“default-storage- engine=INNODB”加到/etc/mysql/my.cnf(位置可能不同)。设完之后就可以用“show engines;”检查是否设置好。不过据说该设置在5.0.22下可能无效。
http://www.geekso.com/post/124/
事务处理:
ySQL 总是启动自动提交你运行的每个 SQL 语句的自动提交(autocommit)模式创建每的新连接。为了使用事务,可以使用 SQL 命令 SET AUTOCOMMIT = 0 关闭自动提交(autocommit)开关,使用 COMMIT 和 ROLLBACK 来提交事务和回滚事务。如果你想保留 autocommit 开关打开,你可以将事务放入 BEGIN 和 COMMIT 或 ROLLBACK之间。
heikki@hundin:~/mysql/client> mysql test
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 5 to server version: 3.23.50-log
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) TYPE = InnoDB;
Query OK, 0 rows affected (0.00 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO CUSTOMER VALUES (10, 'Heikki');
Query OK, 1 row affected (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO CUSTOMER VALUES (15, 'John');
Query OK, 1 row affected (0.00 sec)
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM CUSTOMER;
+------+--------+
| A | B |
+------+--------+
| 10 | Heikki |
+------+--------+
1 row in set (0.00 sec)
Your MySQL connection id is 5 to server version: 3.23.50-log
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> CREATE TABLE CUSTOMER (A INT, B CHAR (20), INDEX (A)) TYPE = InnoDB;
Query OK, 0 rows affected (0.00 sec)
mysql> BEGIN;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO CUSTOMER VALUES (10, 'Heikki');
Query OK, 1 row affected (0.00 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.00 sec)
mysql> SET AUTOCOMMIT=0;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO CUSTOMER VALUES (15, 'John');
Query OK, 1 row affected (0.00 sec)
mysql> ROLLBACK;
Query OK, 0 rows affected (0.00 sec)
mysql> SELECT * FROM CUSTOMER;
+------+--------+
| A | B |
+------+--------+
| 10 | Heikki |
+------+--------+
1 row in set (0.00 sec)
net use \\ip\ipc$ " " /user:" " 建立IPC空链接
net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接
net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H:
net use h: \\ip\c$ 登陆后映射对方C:到本地为H:
net use \\ip\ipc$ /del 删除IPC链接
net use h: /del 删除映射对方到本地的为H:的映射
net user 用户名 密码 /add 建立用户
net user guest /active:yes 激活guest用户
net user 查看有哪些用户
net user 帐户名 查看帐户的属性
net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意:***istrator后加s用复数
net start 查看开启了哪些服务
net start 服务名 开启服务;(如:net start telnet, net start schedule)
net stop 服务名 停止某服务
net time \\目标ip 查看对方时间
net time \\目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息
net view 查看本地局域网内开启了哪些共享
net view \\ip 查看对方局域网内开启了哪些共享
net config 显示系统网络设置
net logoff 断开连接的共享
net pause 服务名 暂停某服务
net send ip "文本信息" 向对方发信息
net ver 局域网内正在使用的网络连接类型和信息
net share 查看本地开启的共享
net share ipc$ 开启ipc$共享
net share ipc$ /del 删除ipc$共享
net share c$ /del 删除C:共享
net user guest 12345 用guest用户登陆后用将密码改为12345
net password 密码 更改系统登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网络连接情况,常用netstat -an
netstat -v 查看正在进行的工作
netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s 查看正在使用的所有协议使用情况
nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写
TELNET就很简单了
开始 运行 TELNET 然后
再HELP回车 就看到了
net use \\ip\ipc$ "密码" /user:"用户名" 建立IPC非空链接
net use h: \\ip\c$ "密码" /user:"用户名" 直接登陆后映射对方C:到本地为H:
net use h: \\ip\c$ 登陆后映射对方C:到本地为H:
net use \\ip\ipc$ /del 删除IPC链接
net use h: /del 删除映射对方到本地的为H:的映射
net user 用户名 密码 /add 建立用户
net user guest /active:yes 激活guest用户
net user 查看有哪些用户
net user 帐户名 查看帐户的属性
net localgroup ***istrators 用户名 /add 把“用户”添加到管理员中使其具有管理员权限,注意:***istrator后加s用复数
net start 查看开启了哪些服务
net start 服务名 开启服务;(如:net start telnet, net start schedule)
net stop 服务名 停止某服务
net time \\目标ip 查看对方时间
net time \\目标ip /set 设置本地计算机时间与“目标IP”主机的时间同步,加上参数/yes可取消确认信息
net view 查看本地局域网内开启了哪些共享
net view \\ip 查看对方局域网内开启了哪些共享
net config 显示系统网络设置
net logoff 断开连接的共享
net pause 服务名 暂停某服务
net send ip "文本信息" 向对方发信息
net ver 局域网内正在使用的网络连接类型和信息
net share 查看本地开启的共享
net share ipc$ 开启ipc$共享
net share ipc$ /del 删除ipc$共享
net share c$ /del 删除C:共享
net user guest 12345 用guest用户登陆后用将密码改为12345
net password 密码 更改系统登陆密码
netstat -a 查看开启了哪些端口,常用netstat -an
netstat -n 查看端口的网络连接情况,常用netstat -an
netstat -v 查看正在进行的工作
netstat -p 协议名 例:netstat -p tcq/ip 查看某协议使用情况(查看tcp/ip协议使用情况)
netstat -s 查看正在使用的所有协议使用情况
nbtstat -A ip 对方136到139其中一个端口开了的话,就可查看对方最近登陆的用户名(03前的为用户名)-注意:参数-A要大写
TELNET就很简单了
开始 运行 TELNET 然后
再HELP回车 就看到了
王继业:电子信息吧,电子信息工程大类专业包括光学工程。现在教育部有一个专业标准,就是这么定的。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>





