紫悦博客

不进则退,退一步万丈悬崖!

0%

2、vi的基本操作

a) 进入vi

在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面:

$ vi myfile

不过有一点要特别注意,就是您进入vi之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用vi的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入vi后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!

b) 切换至插入模式(Insert mode)编辑文件

在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

c) Insert 的切换

您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。

d) 退出vi及保存文件

在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:

: w filename (输入 「w filename」将文章以指定的文件名filename保存)

: wq (输入「wq」,存盘并退出vi)

: q! (输入q!, 不存盘强制退出vi)

1、vi的基本概念

基本上vi可以分为三种状态,分别是命令模式(command mode)、插入模式(Insert mode)和底行模式(last line mode),各模式的功能区分如下:

  1. 命令行模式command mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

  1. 插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

  1. 底行模式(last line mode)

将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。

不过一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。

<img src="http://www.baidu.com/img/bdlogo.gif" onload="proDownImage(this)" width="100" height="100">
<script type="text/javascript">
var proMaxWidth = 100;
var proMaxHeight = 100;
function proDownImage(ImgD,width,height){
    ImgD.width = "";
    ImgD.height = "";
    ImgD.style.marginLeft = 0;
    ImgD.style.marginTop = 0;
    var image=new Image();
    image.src=ImgD.src;
    proMaxWidth = width ? width : proMaxWidth;
    proMaxHeight = height ? height : proMaxHeight;
    if(image.width>0 && image.height>0){
        var rate = (proMaxWidth/image.width < proMaxHeight/image.height)?proMaxWidth/image.width:proMaxHeight/image.height;
        if(rate <= 1){ 
            ImgD.width = image.width*rate;
            ImgD.height =image.height*rate;
        }else {
            ImgD.width = image.width;
            ImgD.height =image.height;
        }
        if(ImgD.width < proMaxWidth){
            var w = (proMaxWidth-ImgD.width)/2;
            ImgD.style.marginLeft=w+'px';
        }
        if(ImgD.height < proMaxHeight){
            var h = (proMaxHeight-ImgD.height)/2;
            ImgD.style.marginTop=h+'px';
        }
    }
}
</script>

<script language="JavaScript">
//添加收藏夹
function AddFavorite(sURL, sTitle)
{
    try
    {
        window.external.addFavorite(sURL, sTitle);
    }
    catch (e)
    {
        try
        {
            window.sidebar.addPanel(sTitle, sURL, "");
        }
        catch (e)
        {
            alert("加入收藏失败,请使用Ctrl+D进行添加");
        }
    }
}
//设为首页
function setHomepage(){
    try {
        document.body.style.behavior='url(#default#homepage)';
        document.body.setHomePage(document.URL);
    }
    catch(e){
           try{
              netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
           }catch (e){
               alert( "该操作被浏览器拒绝,如果想启用该功能,请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true" );
           }
        var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch);
        prefs.setCharPref('browser.startup.homepage',document.URL);
     }
    }
</script>

调用:

<a onclick="AddFavorite(document.URL,document.title)">收藏本站</a> | <a onclick="setHomepage()">设为首页</a>

var $_GET = (function(){
    var url = window.document.location.href.toString();
    var u = url.split("?");
    if(typeof(u[1]) == "string"){
        u = u[1].split("&");
        var get = {};
        for(var i in u){
            var j = u[i].split("=");
            get[j[0]] = j[1];
        }
        return get;
    } else {
        return {};
    }
})();
/*使用时, 可以直接 $_GET['get参数'], 就直接获得GET参数的值*/

<script type="text/javascript">

function checked_val(name){

    var obj = document.getElementsByName(name);

    for(var i=0;i<obj.length;i++){ 

        if(obj[i].checked==true){//得到选中的单选按钮如果要得到值 那么可以:

            return obj[i].value;//返回选中单选按钮的值

        } 

    } 

}

</script>

<iframe width=712 name=’iframe_cotent’ id=’iframe_cotent’ src=’http://liulipeng01.blog.163.com/blog/iframe.php' frameborder=0 scrolling=no onload=’this.height=this.contentWindow.document.documentElement.scrollHeight’></iframe>
<script type=”text/javascript”>
//Iframe 高自动适应
function reinitIframe(id) {
var iframe = document.getElementById(id);
try {
var bHeight = iframe.contentWindow.document.body.scrollHeight;
var dHeight = iframe.contentWindow.document.documentElement.scrollHeight;
var height = Math.max(bHeight, dHeight);
iframe.height = height;
} catch (ex) { }
}
window.setInterval(“reinitIframe(‘iframe_cotent’)”,1);
</script>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>自定义title - azhong.com</title>
</head>
<body >
<p><B>自定义title</B>(IE & FireFox...):把鼠标放在下面的文字上查看效果</p>
<span title="Javascript" title="">默认效果</span><br>
<br>
<span 
title="<marquee style='width:60px;'>http://liulipeng01.blog.163.com/</marquee>" 
    altbg="red" 
    altcolor="yellow" 
    altborder="yellow"
>滚动字幕</span><br>
<br>
<span 
title="<img src='http://os.blog.163.com/common/ava.s?host=liulipeng01&b=0&r=1316831609111' border='0'>" 
    altbg="#F7F7F7" 
    altcolor="#999999" 
    altborder="#CCCCCC"
>图片</span><br>
<br>
<span 
title="
        <i style='font-size:18pt;font-family:verdana;'>
            welcome to <font color='yellow'>http://liulipeng01.blog.163.com/</font>
       </i>" 
   altbg="green" 
   altcolor="black" 
   altborder="darkgreen"
>大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体大字体</span><br>
<br>
<a 
 href="http://liulipeng01.blog.163.com/" 
   title="<ul 
style='list-style-image:url(http://os.blog.163.com/common/ava.s?host=liulipeng01&b=0&r=1316831609111)'>
               <li>我是好人呐!</li>
           <li>我是好人呐!</li>
           <li>我是好人呐!</li>
          </ul>">我是好人!
</a> 
<a 
 href="http://liulipeng01.blog.163.com/" 
    title="<ol><li>我是好人呐!</li><li>我是好人呐!</li><li>我是好人呐!</li></ol>"
>我是好人!</a>
<div 
 style="display:none;
            border:1px solid #000000;
            background-color:#FFFFCC;
            font-size:12px;
            position:absolute;
            padding:2;" 
    id="_altlayer"
></div>
<script language="JavaScript">
<!--
document.body.onmousemove=quickalt;
document.body.onmouseover=getalt;
document.body.onmouseout=restorealt;
var tempalt='';

var UA=navigator.userAgent.toLowerCase();
var ISIE=(UA.indexOf("msie") > 0);
function $(hw_){return document.getElementById(hw_);}

function _Move(evn,o){
    _bW=document.body.clientWidth;
    _left1=document.body.scrollLeft+evn.clientX+10;
    _oW=o.offsetWidth;
    _left=((evn.clientX+_oW)>_bW)?(_left1-_oW-10):_left1;
    if((evn.clientX+_oW)>_bW){_left=(_oW<evn.clientX)?(_left1-_oW-10):_left1;}

    _bH=document.body.clientHeight;
    _top1=document.body.scrollTop+evn.clientY+6;
    _oH=o.offsetHeight;
    _top=((evn.clientY+_oH)>_bH)?(_top1-_oH-6):_top1;
    if((evn.clientY+_oH)>_bH){_top1=(_oH<evn.clientY)?(_top1-_oH-6):_top1;}
    o.style.left=_left;
    o.style.top=_top;
}

function getalt(hw_){
    if(ISIE){evn=event}else{evn=hw_}
    var eo = evn.srcElement?evn.srcElement:evn.target;
    if(eo.title && (eo.title!=""|| (eo.title=="" && tempalt!=""))){
        o = $("_altlayer");
        _Move(evn,o);
        o.style.display='';
        tempalt=eo.title;
        tempbg=eo.getAttribute("altbg");
        tempcolor=eo.getAttribute("altcolor");
        tempborder=eo.getAttribute("altborder");
        eo.title='';
        o.innerHTML=tempalt;
        if (tempbg!=null){o.style.background=tempbg}else{o.style.background="infobackground"}
        if (tempcolor!=null){o.style.color=tempcolor}else{o.style.color=tempcolor="infotext"}
        if (tempborder!=null){o.style.border="1px solid "+tempborder;}else{o.style.border="1px solid #000000";}
    }
}
function quickalt(hw_){
    if(ISIE){evn=event}else{evn=hw_}
    o = $("_altlayer");
    if(o.style.display==""){
        _Move(evn,o);
    }
}
function restorealt(hw_){
    if(ISIE){evn=event}else{evn=hw_}
    var eo = evn.srcElement?evn.srcElement:evn.target;
    eo.title=tempalt;
    tempalt="";
    $("_altlayer").style.display="none";
}
//-->
</script>
</body>
</html>

 

<html>
<head>
<title>JS添加删除元素</title>
<script type="text/javascript">

    function $(nodeId)
    {
        return document.getElementById(nodeId);
    }
    function $Name(tagName)
    {
        return document.getElementsByTagName(tagName);
    }

    function replaceMsg()
    {
        var newNode = document.createElement("P");//创建一个P标签
        newNode.innerHTML = "<font color='red'>替换后的文字</font>";
        var oldNode = $Name("P")[0];//获取body里面第一个p元素
        oldNode.parentNode.replaceChild(newNode,oldNode);//直接替换了标签
    }

    function removeMsg()
    {
        var node = $("p2");//p标签
        var nodeBtn = $("remove");//按钮
        //node.parentNode.removeChild(node); //下面效果相同
        document.body.removeChild(node);//在body中删除id为P2的元素
        //nodeBtn.parentNode.removeChild(nodeBtn);//删除该按钮
        document.body.removeChild(nodeBtn);
        //document.body.removeNode();执行这条语句将清空body里面的任何元素
    }

    function addbefore()
    {
        var newNode = document.createElement("p");//创建P标签
        //var newText = document.createTextNode("前面添加的元素");
        //newNode.appendChild(newText);//与下面效果一样
        newNode.innerHTML = "<font color='red'>前面添加的元素</font>";//书写P标签里面的内容
        var oldNode = $("p3");//目标标签
        //document.body.insertBefore(newNode,oldNode);
        oldNode.parentNode.insertBefore(newNode,oldNode);//在目标标签前面添加元素
    }

    function addlast()
    {
        var newNode = document.createElement("p");//创建P标签
        //var newText = document.createTextNode("后面添加的元素");
        //newNode.appendChild(newText);//与下面效果一样
        newNode.innerHTML = "<font color='red'>后面添加的元素</font>";
        var oldNode = $("p3");

        oldNode.appendChild(newNode);
        //document.body.appendChild(newNode);//如果使用该方法,则在body的最后添加元素
    }

    window.onload = function addArrayMsg()
    {
        var arrayMsg = ['one','two','three','four','five'];//创建数组
        var fragment = document.createDocumentFragment();//创建文档片段
        var newNode ;
        for (var i=0 ;i<arrayMsg.length ;i++ )
        {
            newNode = document.createElement("P");//创建P标签
            var nodeText = document.createTextNode(arrayMsg[i]);//创建文本标签,value为数组里面的值
            newNode.appendChild(nodeText);//
            fragment.appendChild(newNode);//把P标签追加到fragment里面
        }
        document.body.appendChild(fragment);//把fragment追加到body里面
    }  

    function addRow()
    {
        var tab = $("myTable");
        //tab.createCaption().innerHTML="<font color='red'>我的表格</font>";
        var oldTr = $("handleTr");
        var newTr = tab.insertRow();//创建一行
        var newTd1 = newTr.insertCell();//创建一个单元格
        var newTd2 = newTr.insertCell();//创建一个单元格
        newTd1.innerHTML = "<input type='checkbox' />";
        newTd2.innerHTML = "<input type='text' />";

    }

    function removeRow()
    {
        var tab = $("myTable");
//        if(tab.rows.length>0){
//            tab.deleteRow();
//            if(tab.rows.length==1)
//                tab.deleteCaption();
//        }

        var cbbox ;
        for(var i=0;i<tab.rows.length;i++){
            cbbox = tab.rows[i].childNodes[0].childNodes[0];//获取input元素
            if(cbbox.checked){

                tab.deleteRow(i--);
            }
        }
    }

    //全选
    function selAll(value){
        var items = document.all.tags("input");//获取页面上所有的input元素
        for(var i = 0;i<items.length;i++){
            if(items[i].type=="checkbox"){//判断类型是否为checkbox
                items[i].checked = value.checked;
            }
        }
    }

    function getInputValue()
    {
        var inputArray = new Array();//创建一个数组
        var tab = $("myTable");
        var tbInput;
        for(var i=0;i<tab.rows.length;i++){
           tbInput = tab.rows[i].childNodes[1].childNodes[0].value;
           if(tbInput!=""&&tbInput!=null)
               inputArray.push(tbInput);
        }
        inputArray = inputArray.join("*^&");//默认以","号连接
        $("showValue").value = inputArray;
    }
    var x ='10+20';
("alert(x);")
</script>
</head>
<body>
<p id="p1">Hello World!</p><input type="button" value="替换内容" onClick="replaceMsg();" />
<p id="p2">我可以被删除!</p><input type="button" id="remove" value="删除它" onClick="removeMsg();" />
<p id="p3">在我上下添加一个元素吧!</p><input type="button" id="addbefore" value="前面添加" onClick="addbefore();" />
<input type="button" id="addlast" value="后面添加" onClick="addlast();" />
<p></p>
<div style="border:1px solid blue;height:300px">
    <table id="myTable" cellpadding="0" cellspacing="0" border="1px solid blue" style="padding:4px;">

    </table>
    <input type="checkbox" onClick="selAll(this);" />
    <input type="button" value="添加一行" id="addRow" onClick="addRow();" />
    <input type="button" value="删除一行" id="removeRow" onClick="removeRow();" /><br>
    <textarea rows="5" cols="25" id="showValue" /></textarea>
    <input type="button" id="getInputValue" onClick="getInputValue();" value="取值 " />
</div>
</body>
</html>

      
    

<?php
/**
 * array_walk 和 foreach, for 的效率的比较。
 * 我们要测试的是foreach, for, 和 array_walk的效率的问题。 
 */

//产生一个10000的一个数组。
$max = 10000;
$test_arr = range(0, $max);
$temp;
//我们分别用三种方法测试求这些数加上1的值的时间。

// for 的方法
$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
    $temp = $temp + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "就使用for, 没有对数组操作 花费: {$t}\n";

$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
    $test_arr[$i] = $test_arr[$i] + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用for 并且直接对数组进行了操作 花费: {$t}\n";

$t1 = microtime(true);
for ($i = 0; $i < $max; $i++) {
    addOne($test_arr[$i]);
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用for 调用函数对数组操作 花费 : {$t}\n";

$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
    $temp = $temp + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 没有对数组操作 花费 : {$t}\n";

$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
    $v = $v + 1;
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 直接对数组操作 : {$t}\n";

$t1 = microtime(true);
foreach ($test_arr as $k => &$v) {
    addOne($v);
}
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 foreach 调用函数对数组操作 : {$t}\n";

$t1 = microtime(true);
array_walk($test_arr, 'addOne');
$t2 = microtime(true);
$t = $t2 - $t1;
echo "使用 array_walk 花费 : {$t}\n";

function addOne(&$item) {
    $item = $item + 1;
}
?>

执行的结果:
就使用for, 没有对数组操作 花费: 0.15388584136963
使用 foreach 没有对数组操作 花费 : 0.076934814453125

使用for 并且直接对数组进行了操作 花费: 0.14769005775452
使用 foreach 直接对数组操作 : 0.076115131378174

使用for 调用函数对数组操作 花费 : 0.32393312454224
使用 foreach 调用函数对数组操作 : 0.25716996192932
使用 array_walk 花费 : 0.17966890335083

在对10000个数的操作过程中,这个实验我们可以得出这样的结论:

foreach 的效率要比for 高很多,也许有很大的一个原因是for 要进行很多次条件判断。所以以后能用foreach的地方就用foreach,可以提高1倍的效率。

如果循环内要调用函数,用array_walk  最好,它的效率要比for 高出1倍,要比foreach高出43%的效率。

还有一个提示就是如果你这个程序对效率的要求是很高的,那不要在很深的循环中调用函数,要调用函数也要用array_walk,最好的直接把代码写在循环里面。

本文来自:http://www.cnblogs.com/niniwzw/archive/2008/06/03/1212535.html