流行的 IDE 的编辑器,诸如 Eclipse,都提供了括号自动补全的功能,相当的方便。可惜 Vim 默认情况下并没有提供这样的功能,那就只有自己来写了。
将下面的代码加入到 ~/.vimrc 中,重启 Vim,即可:
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
这样,写代码的时候不再担心会丢掉右边的括号了,尤其是函数嵌套的时候 。
英文单词自动补全:
安装:
拷贝文件到[你的gvim的安装目录]\vimfiles\plugin\中即可!
下载:
http://www.vim.org/scripts/script.php?script_id=1338
将下面的代码加入到 ~/.vimrc 中,重启 Vim,即可:
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap < <><ESC>i
:inoremap > <c-r>=ClosePair('>')<CR>
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
这样,写代码的时候不再担心会丢掉右边的括号了,尤其是函数嵌套的时候 。
英文单词自动补全:
安装:
拷贝文件到[你的gvim的安装目录]\vimfiles\plugin\中即可!
下载:
http://www.vim.org/scripts/script.php?script_id=1338
张君,狙击手的枪法!
特种兵的身手! http://news.sina.com.cn/c/235272.html
铁腿无敌的武术高手!
强大的组织能力!
杀人不眨眼的本事!
韦小宝般的泡妞本领! http://www.chinapostnews.com.cn/152/fcgz01.htm
曾纵横数省8年,犯案十余起,杀死、杀伤近50人的张君团伙在2000年9月被警方打掉――临死之前,张君曾经叫嚣,自称乃是全国个人素质最高的匪徒。
张君的骄傲并不是没有道理的,从犯罪的角度看,他具备鹿宪洲团伙作案的迅猛凌厉的特点同时避免了思路上的单一,继承了白宝山优良火力的同时也注重了实战第一――张君团伙使用的54手枪和79轻冲通用51手枪弹,这已经是很高的层次了。反面例子比如台湾第一悍匪张锡铭大侠,ak和m4浑用,看着倒是东西方武器汇集威风得紧,若是哪天晚上若是在被窝里被警察打了埋伏,黑灯瞎火临起一条枪抓把子弹就跑――到了光亮处一看,拿着ak的枪,抓着5点56的北约弹,那才是气得要吐血。
张君手下拥有一只精干高效的团队,在不断的作案中,这只罪恶的队伍不断发展,在这疯狂的扩张过程中,这只队伍的素质下降,最终走入了末路。
特种兵的身手! http://news.sina.com.cn/c/235272.html
铁腿无敌的武术高手!
强大的组织能力!
杀人不眨眼的本事!
韦小宝般的泡妞本领! http://www.chinapostnews.com.cn/152/fcgz01.htm
曾纵横数省8年,犯案十余起,杀死、杀伤近50人的张君团伙在2000年9月被警方打掉――临死之前,张君曾经叫嚣,自称乃是全国个人素质最高的匪徒。
张君的骄傲并不是没有道理的,从犯罪的角度看,他具备鹿宪洲团伙作案的迅猛凌厉的特点同时避免了思路上的单一,继承了白宝山优良火力的同时也注重了实战第一――张君团伙使用的54手枪和79轻冲通用51手枪弹,这已经是很高的层次了。反面例子比如台湾第一悍匪张锡铭大侠,ak和m4浑用,看着倒是东西方武器汇集威风得紧,若是哪天晚上若是在被窝里被警察打了埋伏,黑灯瞎火临起一条枪抓把子弹就跑――到了光亮处一看,拿着ak的枪,抓着5点56的北约弹,那才是气得要吐血。
张君手下拥有一只精干高效的团队,在不断的作案中,这只罪恶的队伍不断发展,在这疯狂的扩张过程中,这只队伍的素质下降,最终走入了末路。
测试结果:风象爱情运
看得出来,你是个不善于沟通的人,对待恋爱,你多以自己为中心,注重自我感觉,却很少替对方设身处地地想一想。记住,爱情不是一个人的事,学会和情人沟通,能让你们感情更融洽,相处更愉快!
测试结果:爱情比较顺畅
你是一个开朗乐观的人,易于为对方看重和珍惜。在你的情感历程中,很少遭遇失恋。你面对事情比较达观,在和伴侣相处过程中,即使你和他发生争执,也会通过积极的沟通找出问题所在,然后解决、处理好。
测试结果:容易发生闪电恋爱
你对生活充满激情,做事干脆利落。你很可能会在公开的娱乐场所认识你的另一半,例如歌舞厅、酒吧、保龄球馆、茶舍......并且他/她是你一件钟情的最出色的那个人。你们闪电式轰轰烈烈的恋爱,常是周围朋友关注的焦点。
测试结果:恋情可能连自己都数不清
你会遇到的恋情可能连自己都数不清。你很随性,也喜欢结交不同的异性朋友,常常是看对眼就在一起,不顺眼就分开,所以你总是恋情不断,却几乎从来没有一段感情是真正让你有印象过。也许随着年纪大了,或是婚姻的承诺与束缚,你才可能收起那份放荡不羁的轻狂岁月。
测试结果:吸血鬼,冲动指数:☆☆☆☆
你算不上是个容易冲动的人,你对于不考虑清楚就行动这样的事情会比较抗拒。你总是习惯于隐藏自己的欲望和冲动,你觉得自己内心有着阴暗面,不适合被人看到的。这样的你,对待他人是有着一定的恐惧的,因为你实际很怕受到伤害,也很怕被人了解自己的内心。 因此,你无疑就是一个躲在暗处的吸血鬼。你内心有着欲望,有着黑暗的一面,但是你不会让它们显露出来。你总是从安全和实际的角度去考虑问题,当你因为某件事情而一时兴起时,你也往往会先压制住,看清大局、考虑清楚后再作出决定。
测试结果:心机指数90%
你很有心机,不管用明用暗,总可以自由的操纵别人,以达成目的,你在无时无刻不在观察别人,是个厉害的狠角色。心机指数90%。
看得出来,你是个不善于沟通的人,对待恋爱,你多以自己为中心,注重自我感觉,却很少替对方设身处地地想一想。记住,爱情不是一个人的事,学会和情人沟通,能让你们感情更融洽,相处更愉快!
测试结果:爱情比较顺畅
你是一个开朗乐观的人,易于为对方看重和珍惜。在你的情感历程中,很少遭遇失恋。你面对事情比较达观,在和伴侣相处过程中,即使你和他发生争执,也会通过积极的沟通找出问题所在,然后解决、处理好。
测试结果:容易发生闪电恋爱
你对生活充满激情,做事干脆利落。你很可能会在公开的娱乐场所认识你的另一半,例如歌舞厅、酒吧、保龄球馆、茶舍......并且他/她是你一件钟情的最出色的那个人。你们闪电式轰轰烈烈的恋爱,常是周围朋友关注的焦点。
测试结果:恋情可能连自己都数不清
你会遇到的恋情可能连自己都数不清。你很随性,也喜欢结交不同的异性朋友,常常是看对眼就在一起,不顺眼就分开,所以你总是恋情不断,却几乎从来没有一段感情是真正让你有印象过。也许随着年纪大了,或是婚姻的承诺与束缚,你才可能收起那份放荡不羁的轻狂岁月。
测试结果:吸血鬼,冲动指数:☆☆☆☆
你算不上是个容易冲动的人,你对于不考虑清楚就行动这样的事情会比较抗拒。你总是习惯于隐藏自己的欲望和冲动,你觉得自己内心有着阴暗面,不适合被人看到的。这样的你,对待他人是有着一定的恐惧的,因为你实际很怕受到伤害,也很怕被人了解自己的内心。 因此,你无疑就是一个躲在暗处的吸血鬼。你内心有着欲望,有着黑暗的一面,但是你不会让它们显露出来。你总是从安全和实际的角度去考虑问题,当你因为某件事情而一时兴起时,你也往往会先压制住,看清大局、考虑清楚后再作出决定。
测试结果:心机指数90%
你很有心机,不管用明用暗,总可以自由的操纵别人,以达成目的,你在无时无刻不在观察别人,是个厉害的狠角色。心机指数90%。
最近,zend for eclipse除了6.0.1版本,但是我整合apata(有两种方法整合)后发现在D盘建立php工程后它不建立函数跳转和一些tag索引,为此,我安装卸载多次方发现是由于它在D盘,我在D盘以前建立过php工程,建立了一个Config.Msi目录,它是隐藏起来的,你需要打开工具栏的隐藏选项即可看到,然后del掉,一切ok了。。。哈哈哈,这个文件是由于eclipse换工作目录时候(file-->witch work space ),生成的。如果你想换目录到D盘,最好把:C:\Documents and Settings\Administrator\Zend\workspaces\DefaultWorkspace 下的.metadata拷贝到d盘,你然后在D下面建立工程:aaa bbb ccc等工程即可。.metadata好像是个配置文件,其可以进行函数提示等都是在里面配置的,至于其他的我也不太明白,呵呵
http://www.thss.tsinghua.edu.cn/faculty_xiangd_cn.asp
http://www.szxgair.com/cbthtm/ncmrsjnd/22304792.htm
http://www.szxgair.com/cbthtm/ncmrsjnd/22304792.htm
歌曲:悟空
演唱:叶坳栖
作词:尹杰
作曲:叶坳栖
☆LRC:明奇胖胖
QQ:346716061☆
不管你们是老夫少妻 还是姐弟搭配
只要你们之间有爱情 没有别的目的
为了美貌用自己多金 换对方来拜金
如果你有一天没有金 只能得到无情
为了金钱用自己的美 背叛真情真心
等到有一天青春消逝 后悔没有意义
人生苦短 耗尽一生只为假装和欺骗
悲欢聚散 虚荣一时得到永远的孤单
谁都期盼 找到一个不离不弃的港湾
快乐短暂 为了一个昙花一现的快感
丢了一生一世的幸福
不管你们是老夫少妻 还是姐弟搭配
只要你们之间有爱情 没有别的目的
为了美貌用自己多金 换对方来拜金
如果你有一天没有金 只能得到无情
为了金钱用自己的美 背叛真情真心
等到有一天青春消逝 后悔没有意义
人生苦短 耗尽一生只为假装和欺骗
悲欢聚散 虚荣一时得到永远的孤单
谁都期盼 找到一个不离不弃的港湾
快乐短暂 为了一个昙花一现的快感
丢了一生一世的幸福
☆LRC:明奇胖胖
QQ:346716061☆
人生苦短 耗尽一生只为假装和欺骗
悲欢聚散 虚荣一时得到永远的孤单
谁都期盼 找到一个不离不弃的港湾
快乐短暂 为了一个昙花一现的快感
丢了一生一世的幸福
你觉得值得吗
你觉得值得吗
演唱:叶坳栖
作词:尹杰
作曲:叶坳栖
☆LRC:明奇胖胖
QQ:346716061☆
不管你们是老夫少妻 还是姐弟搭配
只要你们之间有爱情 没有别的目的
为了美貌用自己多金 换对方来拜金
如果你有一天没有金 只能得到无情
为了金钱用自己的美 背叛真情真心
等到有一天青春消逝 后悔没有意义
人生苦短 耗尽一生只为假装和欺骗
悲欢聚散 虚荣一时得到永远的孤单
谁都期盼 找到一个不离不弃的港湾
快乐短暂 为了一个昙花一现的快感
丢了一生一世的幸福
不管你们是老夫少妻 还是姐弟搭配
只要你们之间有爱情 没有别的目的
为了美貌用自己多金 换对方来拜金
如果你有一天没有金 只能得到无情
为了金钱用自己的美 背叛真情真心
等到有一天青春消逝 后悔没有意义
人生苦短 耗尽一生只为假装和欺骗
悲欢聚散 虚荣一时得到永远的孤单
谁都期盼 找到一个不离不弃的港湾
快乐短暂 为了一个昙花一现的快感
丢了一生一世的幸福
☆LRC:明奇胖胖
QQ:346716061☆
人生苦短 耗尽一生只为假装和欺骗
悲欢聚散 虚荣一时得到永远的孤单
谁都期盼 找到一个不离不弃的港湾
快乐短暂 为了一个昙花一现的快感
丢了一生一世的幸福
你觉得值得吗
你觉得值得吗
由于SourceForge网站被封,导致很多程序员常用的开发框架都无法下载了,工作和学习非常不方便,下面教大家一个简单的下载sourceforge上面开源软件的办法:
http://mirror.optus.net/sourceforge/
访问如上URL地址,这是一个sourceforge的下载镜像站点,按照字母顺序分目录列出来sourceforge上面所有的软件下载了,我们可以按目录一级一级找到自己要下载的软件,例如:
我要下载Hibernate,那么寻找 /h/hi/hibernate 目录就找到了,该目录下面是所有Hibernate相关软件各个版本的下载地址:
http://mirror.optus.net/sourceforge/h/hi/hibernate/
再例如我要下载Spring也一样,寻找 /s/sp/springframework 目录,即:
http://mirror.optus.net/sourceforge/s/sp/springframework/
如果你想下载JBoss Seam和JBoss应用服务器的话,是下面这个目录:
http://mirror.optus.net/sourceforge/j/jb/jboss/
这个镜像的下载速度不错噢,经过测试每秒有60KB的稳定下载速度。
http://mirror.optus.net/sourceforge/
访问如上URL地址,这是一个sourceforge的下载镜像站点,按照字母顺序分目录列出来sourceforge上面所有的软件下载了,我们可以按目录一级一级找到自己要下载的软件,例如:
我要下载Hibernate,那么寻找 /h/hi/hibernate 目录就找到了,该目录下面是所有Hibernate相关软件各个版本的下载地址:
http://mirror.optus.net/sourceforge/h/hi/hibernate/
再例如我要下载Spring也一样,寻找 /s/sp/springframework 目录,即:
http://mirror.optus.net/sourceforge/s/sp/springframework/
如果你想下载JBoss Seam和JBoss应用服务器的话,是下面这个目录:
http://mirror.optus.net/sourceforge/j/jb/jboss/
这个镜像的下载速度不错噢,经过测试每秒有60KB的稳定下载速度。
姜源 说:
http://www.scribd.com/doc/263139/VIM-for-PHP-Programmers
姜源 说:
这个slide介绍了一些用vim写php的技艺。
姜源 说:
技巧
姜源 说:
但如果你希望用那些auto complete比较好的功能还是别用vi了。
向东 xiangdong.org 说:
hao ..
姜源 说:
vi是一个超级editor不是一个ide
姜源 说:
以前写php的时候我只用editplus
姜源 说:
基本是开着手册。
姜源 说:
很少用自动完成功能。
向东 xiangdong.org 说:
懒人啊,呵呵,我用zend咯。。
http://www.scribd.com/doc/263139/VIM-for-PHP-Programmers
姜源 说:
这个slide介绍了一些用vim写php的技艺。
姜源 说:
技巧
姜源 说:
但如果你希望用那些auto complete比较好的功能还是别用vi了。
向东 xiangdong.org 说:
hao ..
姜源 说:
vi是一个超级editor不是一个ide
姜源 说:
以前写php的时候我只用editplus
姜源 说:
基本是开着手册。
姜源 说:
很少用自动完成功能。
向东 xiangdong.org 说:
懒人啊,呵呵,我用zend咯。。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript" src="template.js"></script>
<script language="javascript">
</script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>js测试</title>
</head>
<body>
<textarea name="template_jst" id="template_jst" cols="44" rows="22">
Hello ${customer.first} ${customer.last}.<br/>
Your shopping cart has ${products.length} item(s):
<table>
<tr><td>Name</td>
<td>Description</td>
<td>Price</td>
<td>Quantity & Alert</td>
</tr>
{for p in products}
<tr><td>${p.name|capitalize}</td><td>${p.desc}</td>
<td>$${p.price}</td><td>${p.quantity} :
${p.alert|default:""|capitalize}</td>
</tr>
{forelse}
<tr><td colspan="4">No products in your cart.</tr>
{/for}
</table>
{if customer.level == "gold"}
We love you! Please check out our Gold Customer specials!
{else}
Become a Gold Customer by buying more stuff here.
{/if}
</textarea>
<div>
<textarea name="jsData" id="jsData" cols="44" rows="21">
var data = {
products : [ { name: "Linu", desc: "computer",
price: 1000, quantity: 100, alert:null },
{ name: "ipod", desc: "music player",
price: 200, quantity: 200, alert:"on sale now!" },
{ name: "cinema display", desc: "screen",
price: 800, quantity: 300, alert:"best deal!" } ],
customer : { first: "John", last: "Public", level: "gold" }
};
</textarea>
</div>
<hr/>
Output:
<div id="output" name="dfjdk">test</div>
</body>
<script language="javascript">
var dataTextarea = document.getElementById("jsData");
var outputEl = document.getElementById("output");
eval(dataTextarea.value);
//outputEl.innerHTML = TrimPath.processDOMTemplate("template_jst", data);
outputEl.innerHTML =TrimPath.parseTemplate(document.getElementById("template_jst").value, "template_jst").process(data);
</script>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript" src="template.js"></script>
<script language="javascript">
</script>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>js测试</title>
</head>
<body>
<textarea name="template_jst" id="template_jst" cols="44" rows="22">
Hello ${customer.first} ${customer.last}.<br/>
Your shopping cart has ${products.length} item(s):
<table>
<tr><td>Name</td>
<td>Description</td>
<td>Price</td>
<td>Quantity & Alert</td>
</tr>
{for p in products}
<tr><td>${p.name|capitalize}</td><td>${p.desc}</td>
<td>$${p.price}</td><td>${p.quantity} :
${p.alert|default:""|capitalize}</td>
</tr>
{forelse}
<tr><td colspan="4">No products in your cart.</tr>
{/for}
</table>
{if customer.level == "gold"}
We love you! Please check out our Gold Customer specials!
{else}
Become a Gold Customer by buying more stuff here.
{/if}
</textarea>
<div>
<textarea name="jsData" id="jsData" cols="44" rows="21">
var data = {
products : [ { name: "Linu", desc: "computer",
price: 1000, quantity: 100, alert:null },
{ name: "ipod", desc: "music player",
price: 200, quantity: 200, alert:"on sale now!" },
{ name: "cinema display", desc: "screen",
price: 800, quantity: 300, alert:"best deal!" } ],
customer : { first: "John", last: "Public", level: "gold" }
};
</textarea>
</div>
<hr/>
Output:
<div id="output" name="dfjdk">test</div>
</body>
<script language="javascript">
var dataTextarea = document.getElementById("jsData");
var outputEl = document.getElementById("output");
eval(dataTextarea.value);
//outputEl.innerHTML = TrimPath.processDOMTemplate("template_jst", data);
outputEl.innerHTML =TrimPath.parseTemplate(document.getElementById("template_jst").value, "template_jst").process(data);
</script>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>一个使用到for...in循环的Javascript示例</title>
</head>
<body>
<script type="text/javascript">
var data = {
products : [ { name: "Linu", desc: "computer",
price: 1000, quantity: 100, alert:null },
{ name: "ipod", desc: "music player",
price: 200, quantity: 200, alert:"on sale now!" },
{ name: "cinema display", desc: "screen",
price: 800, quantity: 300, alert:"best deal!" } ],
customer : { first: "John", last: "Public", level: "gold" }
};
function isArray(a) {
if(typeof a =="undefined"||null==a)
{
return false;
}
else
{
return a.sort ? true : false;
}
}
function printObj(obj,depth,Attr)
{
if(typeof depth=="undefined"){depth=0;}
if(typeof Attr=="undefined"){Attr="";}
/*
var space="";
for(var i=0;i<=depth;i++)
{
space+=" "
}
if(""!=Attr)
{
document.write(space+Attr+":<br />");
}
*/
if(isArray(obj))
{
for(var i=0;i<obj.length;i++)
{
printObj(obj[i],depth++,i);
}
}
else{
if(typeof obj=="undefined")
{
}else if(typeof obj=="string"||typeof obj=="number" ||typeof obj=="boolean")
{
//document.write(space+" "+obj+"<br />");
document.write(" "+obj+"<br />");
}else
{
for(var p in obj)
{
var eachValue=obj[p];
printObj(eachValue,depth++,p);
}
}
}
}
printObj(data);
</script>
</body>
</html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>一个使用到for...in循环的Javascript示例</title>
</head>
<body>
<script type="text/javascript">
var data = {
products : [ { name: "Linu", desc: "computer",
price: 1000, quantity: 100, alert:null },
{ name: "ipod", desc: "music player",
price: 200, quantity: 200, alert:"on sale now!" },
{ name: "cinema display", desc: "screen",
price: 800, quantity: 300, alert:"best deal!" } ],
customer : { first: "John", last: "Public", level: "gold" }
};
function isArray(a) {
if(typeof a =="undefined"||null==a)
{
return false;
}
else
{
return a.sort ? true : false;
}
}
function printObj(obj,depth,Attr)
{
if(typeof depth=="undefined"){depth=0;}
if(typeof Attr=="undefined"){Attr="";}
/*
var space="";
for(var i=0;i<=depth;i++)
{
space+=" "
}
if(""!=Attr)
{
document.write(space+Attr+":<br />");
}
*/
if(isArray(obj))
{
for(var i=0;i<obj.length;i++)
{
printObj(obj[i],depth++,i);
}
}
else{
if(typeof obj=="undefined")
{
}else if(typeof obj=="string"||typeof obj=="number" ||typeof obj=="boolean")
{
//document.write(space+" "+obj+"<br />");
document.write(" "+obj+"<br />");
}else
{
for(var p in obj)
{
var eachValue=obj[p];
printObj(eachValue,depth++,p);
}
}
}
}
printObj(data);
</script>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<div id = "contentdiv">111</div>
</body>
<script language="javascript">
var htmls="hello the world";
alert(document.getElementById('contentdiv').innerHTML);//HTML大写,否则调试不通过啊,必须让div加载后调用该函数
document.getElementById('contentdiv').innerHTML=htmls;
</script>
</html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
<div id = "contentdiv">111</div>
</body>
<script language="javascript">
var htmls="hello the world";
alert(document.getElementById('contentdiv').innerHTML);//HTML大写,否则调试不通过啊,必须让div加载后调用该函数
document.getElementById('contentdiv').innerHTML=htmls;
</script>
</html>
老婆有一个优点,那就是智力超群。她有着超常的判断力和逻辑思维能力,常作惊人之语,让我佩服得五体投地。生活虽然平淡,但她的妙语时不时能给我一点意想不到的惊喜,为了和大家分享我的惊喜,特地总结了一下她比较著名的言论,举出最让我佩服的十大例子:
1.有一段时间我打她呼机她总是不回电,问她,她说:“我把呼机关了。”“为什么要把呼机关掉?”“公司常打我呼机叫我加班,我关了呼机,他们就呼不到我了。”
2.后来她买了一个手机,有一次她出门忘了带手机,从街上打公用电话给我:“老公快帮我给小芳打个电话,告诉她到麦当劳门口等我。”“你自己为什么不打?”“我手机没带呀!”
3.有一次看到地摊上卖莲蓬,老婆问:“怎么卖?”答:“一块一个。”“这么贵啊,三块两个卖不卖?”
4.有一次我和她出门,两个人只带了一把家门钥匙,她要去菜场,让我先回家,把钥匙留给她。我问她:“为什么要把钥匙留给你啊?”她说:“这样等会儿我回家,你就不用下来给我开门了。”
5.有一次听录音机,她一不小心按了录音按钮,我叫道:“快停掉,你把带子上东西抹掉了!”她不去按录音机却上来捂我的嘴,事后她解释道:“只要我们不发声音,带子上的内容不就抹不掉了。”
6.看电视新闻看到一半,她说:“快帮我按一下暂停,我要去洗手间!”
7.她说:“唉,明天又停电,什么事也做不成,只好躺在床上看一天电视了。”
8.唱卡拉OK,她用电视机摇控器上的选台按钮来选歌曲,都按出电视新闻来了,她还不明白:“为什么王菲的歌要配警察破案的画面?”
9.两个人搬电脑,她说:“这么重啊,你为什么搬之前不先删掉点东西?”
10.最后我把上面写的给她看,本以为她会不好意思笑的,不料她看了两遍,抬起头迷惑不解地问我:“怎么了,我说错什么了吗?”
1.有一段时间我打她呼机她总是不回电,问她,她说:“我把呼机关了。”“为什么要把呼机关掉?”“公司常打我呼机叫我加班,我关了呼机,他们就呼不到我了。”
2.后来她买了一个手机,有一次她出门忘了带手机,从街上打公用电话给我:“老公快帮我给小芳打个电话,告诉她到麦当劳门口等我。”“你自己为什么不打?”“我手机没带呀!”
3.有一次看到地摊上卖莲蓬,老婆问:“怎么卖?”答:“一块一个。”“这么贵啊,三块两个卖不卖?”
4.有一次我和她出门,两个人只带了一把家门钥匙,她要去菜场,让我先回家,把钥匙留给她。我问她:“为什么要把钥匙留给你啊?”她说:“这样等会儿我回家,你就不用下来给我开门了。”
5.有一次听录音机,她一不小心按了录音按钮,我叫道:“快停掉,你把带子上东西抹掉了!”她不去按录音机却上来捂我的嘴,事后她解释道:“只要我们不发声音,带子上的内容不就抹不掉了。”
6.看电视新闻看到一半,她说:“快帮我按一下暂停,我要去洗手间!”
7.她说:“唉,明天又停电,什么事也做不成,只好躺在床上看一天电视了。”
8.唱卡拉OK,她用电视机摇控器上的选台按钮来选歌曲,都按出电视新闻来了,她还不明白:“为什么王菲的歌要配警察破案的画面?”
9.两个人搬电脑,她说:“这么重啊,你为什么搬之前不先删掉点东西?”
10.最后我把上面写的给她看,本以为她会不好意思笑的,不料她看了两遍,抬起头迷惑不解地问我:“怎么了,我说错什么了吗?”
PHP作为一种服务器端的脚本语言,象编写简单,或者是复杂的动态网页这样的任务,它完全能够胜任。但事情不总是如此,有时为了实现某个功能,必须借助于操作系统的外部程序(或者称之为命令),这样可以做到事半功倍。
那么,是否可以在PHP脚本中调用外部命令呢?如果能,如何去做呢?有些什么方面的顾虑呢?相信你看了本文后,肯定能够回答这些问题了。
是否可以?
答案是肯定的。PHP和其它的程序设计语言一样,完全可以在程序内调用外部命令,并且是很简单的:只要用一个或几个函数即可。阅读全文
那么,是否可以在PHP脚本中调用外部命令呢?如果能,如何去做呢?有些什么方面的顾虑呢?相信你看了本文后,肯定能够回答这些问题了。
是否可以?
答案是肯定的。PHP和其它的程序设计语言一样,完全可以在程序内调用外部命令,并且是很简单的:只要用一个或几个函数即可。阅读全文
背景:经blockips实践%config(noreplace) /usr/local/nginx/conf/blockips.conf,在安装时有/usr/local/nginx/conf/blockips.conf,不会覆盖原来的,而是新起文件名:/usr/local/nginx/conf/blockips.conf.rpmnew ,在删这个rpm包时,rpm -e blockips 会将原来的没有被覆盖的文件/usr/local/nginx/conf/blockips.conf挪动为:/usr/local/nginx/conf/blockips.conf.rpmsave 。也就是说安装时不覆盖,生成新文件.rpmnew,卸载时那个安装时没有覆盖的文件挪动为.rpmsave。
[实践OK]blockips打包里实践得出来的。还发现如果和即将安装的一样的时候,是不会作上述重命名的,直接就安装上了,也就是说安装前做了比对操作!
实践也证明了上面的一个情况,一是noreplace会比对不一样给生成新的.rpmnew,卸载RPM包时会将原来没覆盖的文件给挪为.rpmsave,如果相同则直接覆盖,不做前面这些操作。
#rpm -ihv blockips-1.0.0-220622153009.el7.x86_64.rpm
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:blockips-1.0.0-220622153009.el7 ################################# [100%]
警告:/usr/local/nginx/conf/blockips.conf 已建立为 /usr/local/nginx/conf/blockips.conf.rpmnew
警告:/usr/local/nginx/conf/vhosts/blockipsvc.conf 已建立为 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmnew
rpm -e blockips
警告:/usr/local/nginx/conf/vhosts/blockipsvc.conf 已另存为 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmsave
警告:/usr/local/nginx/conf/blockips.conf 已另存为 /usr/local/nginx/conf/blockips.conf.rpmsave
ls -1 /usr/local/nginx/conf/blockips.conf.rpm*
/usr/local/nginx/conf/blockips.conf.rpmnew #rpm包安装时发现同名配置,给安装包里的重新命名为.rpmnew
/usr/local/nginx/conf/blockips.conf.rpmsave #卸载rpm包前因文件名内容不一样没有被覆盖的文件给重新命令为.rpmsave
ls -1 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpm*
/usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmnew
/usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmsave
上面的实践来源:https://jackxiang.com/post/11406/
In addition to the marked directories, the standard Linux documentation directories, such as /usr/share/man, are automatically assumed to be documentation directories.
Similar to the %doc directive, the %config directive marks a file as configuration. For example:
%files
/sbin/ypbind
%config /etc/rc.d/init.d/*
%config /etc/yp.conf
%doc README NEWS
A special option to the %config directive, noreplace, tells RPM not to overwrite, or replace a configuration file. For example:
%files
/sbin/ypbind
%config /etc/rc.d/init.d/*
%config(noreplace) /etc/yp.conf
%doc README NEWS
Use this option to help protect local modifications. If you use %config(noreplace), the file will not overwrite an existing file that has been modified. If the file has not been modified on disk, the rpm command will overwrite the file. But, if the file has been modified on disk, the rpm command will copy the new file with an extra file-name extension of .rpmnew.
Similarly, %config(missingok) means that the file does not have to exist on disk. You can use this modifier for files or links that are created during the %post scripts but will need to be removed if the package is removed.
Another special modifier, %ghost, tells the rpm command that the file should not be included in the package. You can use this to name the needed attributes for a file that the program, when installed, will create. For example, you may want to ensure that a program’s log file has certain attributes.
From:https://docs.fedoraproject.org/ro/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s05s03.html
强制删除所有rpm包:
RPM包常用参数 (备忘用)
1.安装一个包
# rpm -ivh
2.升级一个包
# rpm -Uvh
3.移走一个包
# rpm -e
4.安装参数
--force 即使覆盖属于其它包的文件也强迫安装
--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
5.查询一个包是否被安装
# rpm -q < rpm package name>
6.得到被安装的包的信息
# rpm -qi < rpm package name>
阅读全文
[实践OK]blockips打包里实践得出来的。还发现如果和即将安装的一样的时候,是不会作上述重命名的,直接就安装上了,也就是说安装前做了比对操作!
实践也证明了上面的一个情况,一是noreplace会比对不一样给生成新的.rpmnew,卸载RPM包时会将原来没覆盖的文件给挪为.rpmsave,如果相同则直接覆盖,不做前面这些操作。
#rpm -ihv blockips-1.0.0-220622153009.el7.x86_64.rpm
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:blockips-1.0.0-220622153009.el7 ################################# [100%]
警告:/usr/local/nginx/conf/blockips.conf 已建立为 /usr/local/nginx/conf/blockips.conf.rpmnew
警告:/usr/local/nginx/conf/vhosts/blockipsvc.conf 已建立为 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmnew
rpm -e blockips
警告:/usr/local/nginx/conf/vhosts/blockipsvc.conf 已另存为 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmsave
警告:/usr/local/nginx/conf/blockips.conf 已另存为 /usr/local/nginx/conf/blockips.conf.rpmsave
ls -1 /usr/local/nginx/conf/blockips.conf.rpm*
/usr/local/nginx/conf/blockips.conf.rpmnew #rpm包安装时发现同名配置,给安装包里的重新命名为.rpmnew
/usr/local/nginx/conf/blockips.conf.rpmsave #卸载rpm包前因文件名内容不一样没有被覆盖的文件给重新命令为.rpmsave
ls -1 /usr/local/nginx/conf/vhosts/blockipsvc.conf.rpm*
/usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmnew
/usr/local/nginx/conf/vhosts/blockipsvc.conf.rpmsave
上面的实践来源:https://jackxiang.com/post/11406/
In addition to the marked directories, the standard Linux documentation directories, such as /usr/share/man, are automatically assumed to be documentation directories.
Similar to the %doc directive, the %config directive marks a file as configuration. For example:
%files
/sbin/ypbind
%config /etc/rc.d/init.d/*
%config /etc/yp.conf
%doc README NEWS
A special option to the %config directive, noreplace, tells RPM not to overwrite, or replace a configuration file. For example:
%files
/sbin/ypbind
%config /etc/rc.d/init.d/*
%config(noreplace) /etc/yp.conf
%doc README NEWS
Use this option to help protect local modifications. If you use %config(noreplace), the file will not overwrite an existing file that has been modified. If the file has not been modified on disk, the rpm command will overwrite the file. But, if the file has been modified on disk, the rpm command will copy the new file with an extra file-name extension of .rpmnew.
Similarly, %config(missingok) means that the file does not have to exist on disk. You can use this modifier for files or links that are created during the %post scripts but will need to be removed if the package is removed.
Another special modifier, %ghost, tells the rpm command that the file should not be included in the package. You can use this to name the needed attributes for a file that the program, when installed, will create. For example, you may want to ensure that a program’s log file has certain attributes.
From:https://docs.fedoraproject.org/ro/Fedora_Draft_Documentation/0.1/html/RPM_Guide/ch09s05s03.html
强制删除所有rpm包:
rpm -qa|awk '{print "rpm -e " $0 " --allmatches --nodeps"}'|sh
RPM包常用参数 (备忘用)
1.安装一个包
# rpm -ivh
2.升级一个包
# rpm -Uvh
3.移走一个包
# rpm -e
4.安装参数
--force 即使覆盖属于其它包的文件也强迫安装
--nodeps 如果该RPM包的安装依赖其它包,即使其它包没装,也强迫安装。
5.查询一个包是否被安装
# rpm -q < rpm package name>
6.得到被安装的包的信息
# rpm -qi < rpm package name>
阅读全文
放着备查
* –b 当file存在并且是块文件时返回真
* -c 当file存在并且是字符文件时返回真
* -d 当pathname存在并且是一个目录时返回真
* -e 当pathname指定的文件或目录存在时返回真
* -f 当file存在并且是正规文件时返回真
* -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
* -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
* -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
* -p 当file存在并且是命令管道时返回为真
* -r 当由pathname指定的文件或目录存在并且可读时返回为真
* -s 当file存在文件大小大于0时返回真
* -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
* -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
* -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
UNIX Shell 里面比较字符写法:
* -eq 等于
* -ne 不等于
* -gt 大于
* -lt 小于
* -le 小于等于
* -ge 大于等于
* -z 空串
* = 两个字符相等
* != 两个字符不等
* -n 非空串
* –b 当file存在并且是块文件时返回真
* -c 当file存在并且是字符文件时返回真
* -d 当pathname存在并且是一个目录时返回真
* -e 当pathname指定的文件或目录存在时返回真
* -f 当file存在并且是正规文件时返回真
* -g 当由pathname指定的文件或目录存在并且设置了SGID位时返回为真
* -h 当file存在并且是符号链接文件时返回真,该选项在一些老系统上无效
* -k 当由pathname指定的文件或目录存在并且设置了“粘滞”位时返回真
* -p 当file存在并且是命令管道时返回为真
* -r 当由pathname指定的文件或目录存在并且可读时返回为真
* -s 当file存在文件大小大于0时返回真
* -u 当由pathname指定的文件或目录存在并且设置了SUID位时返回真
* -w 当由pathname指定的文件或目录存在并且可执行时返回真。一个目录为了它的内容被访问必然是可执行的。
* -o 当由pathname指定的文件或目录存在并且被子当前进程的有效用户ID所指定的用户拥有时返回真。
UNIX Shell 里面比较字符写法:
* -eq 等于
* -ne 不等于
* -gt 大于
* -lt 小于
* -le 小于等于
* -ge 大于等于
* -z 空串
* = 两个字符相等
* != 两个字符不等
* -n 非空串
<?php
function change($num)
{
$num_zero_result=2;
if($num==1)
return 1;
if($num==2)
return 2;
for($i=1;$i<$num-1;$i++)
{
$num_zero_result=$num_zero_result*2;
}
return $num_zero_result;
}
echo change(1);
echo change(2);
echo change(3);
echo change(4);
echo change(5);
echo change(6);
echo change(7);
echo change(8);
echo change(9);
?>
function change($num)
{
$num_zero_result=2;
if($num==1)
return 1;
if($num==2)
return 2;
for($i=1;$i<$num-1;$i++)
{
$num_zero_result=$num_zero_result*2;
}
return $num_zero_result;
}
echo change(1);
echo change(2);
echo change(3);
echo change(4);
echo change(5);
echo change(6);
echo change(7);
echo change(8);
echo change(9);
?>