免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 852 | 回复: 0
打印 上一主题 下一主题

linux下的vi command [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-19 16:17 |只看该作者 |倒序浏览

                                                精通vi命令
如何启动vi命令呢?
当你在图形模式时,你得先打开终端,然后在shell提示符下输入vi,就可以了。
当然你也可以指定一个文件名;如:
$vi script.txt
表示在当前目录下创建了一个空文本文件script.txt
你也可以提供一个或更多个文件。(如果所提供的文件名不存在,则创建)
例如:
  $vi file.txt1 file.txt2
  
  现在让我们来了解如何退出vi,以及保存在vi中所做的修改和如何得到帮助信息。
  退出vi有如下的命令格式:
   :n    当你指定了多个文件时,使用这个命令来编辑下一个文件。
   :q    不保存文件退出.
   :q!    不保存文件,并强制退出.
   :wq file    保存文件并退出,这里的file代表相对路径的文件名,或者是绝对路径的文件名。
   :w file     保存文件,如果没有指定文件名,就是当前的文件名。
   :w!    强制保存文件(前提是你对这个文件具有写的权限)。
   :x    保存文件并退出,等价于ZZ命令。
   ZZ    保存文件并退出。
   zz    以当前鼠标位置为准,向前滚动半屏。
   :h    请求帮助
  让我们来看看几个最基本的例子
  假如你想新建一个文件名为script.txt,路径为当前目录。可以在shell模式下,输入如下:
  $vi script.txt
  现在你就进入了vi命令,现在你就可以用上面的退出命令退出了。
上面的命令只告诉我们如何退出vi,和保存文件,我们还不知如何对文件进行编辑和修改。基本的命令如下:
   插入命令:
   想插入新的内容,得先导航到插入的位置,然后进入修改模式:
    i        在当前鼠样之前进入插入模式,并替换文本。
    I        在行的开始处进入插入模式
    a        在当前鼠标之后进入插入模式,添加或替换文本。
    A        在当前行的末尾进入插入模式。
    o        在当前行的下面插入一个新行
    O        在当前行的上面插入一个新行。
    J        将下一行与当前行合并成一行
    :e file       编辑指定的文件,并退出当前的文件。(file 表示路径加文件名)
    :e!          重新读取当前文件,并放弃所做的修改。
    :r filename    在当前行处插入一个新的文件
  编辑命令
    C        删除从当前光标到行尾,并进入插入模式。
    cc        删除整行,并进入插入模式。
    S            删除整行,并进入插入模式。
    s            删除当前光标处的字符,并进入插入模式
    cw         在当前光标处删除一个单词,并进入插入模式。
    R        进入插入模式(一种不同的插入模式),并覆盖已存在的字符。
    u        撤消上一次的操作
删除命令
    从指定的位置删除一个文本块
    dl        删除当前光标处的字符
    ndl        删除当前光标处的n个字符(向前计算)
            如:3dl  将要删除3个字符
    dw        删除当前光标处的单词
    ndw        删除当前光标处的n个单词(向前计算)
            如:5dw  将要删除5个单词
    dG        删除从当前光标到文件的末尾
    dd or :d     删除当前行
    ndd        从当前行开始,向前删除n行,
        如:3dd  将要删除3行
    D        删除从当前光标到行末,等价于d$
    d)         除了拥有D和d$的功能外,还有下面描述的功能:
            把鼠标放在{,[ 或者(上,将要删除所有与之匹配的内容
            如:prints()
            { if [ -f $1 ]
             then
             ehco "the \$1 is a file"
             fi
        }
        当光标在{上时,按下d),就可删除{}之间的所有内容(假如你是在插入模式下,得先按             下‘esc’键,再将光标定位在{上,就可以了)
    x        删除当前光标处的字符,相当于dl命令
    X        删除当前光标左边处的字符
    :X        对文件加密(即给文件设置密码保护)
    nx        删除n个字符从当前光标处。
                例如:3x 将从当前光标处向前删除3个字符
  复制与粘贴
   复制命令,通常是从一个指定的位置,复制一个文本块,以下是具体的命令:
    yl        向前复制一个字符(这里的字母顺序不能颠倒)
    yw        向前复制一个单词(这里的字母顺序不能颠倒)
    y$        从当位置复制到行尾(这里的字母顺序不能颠倒)
    yG         从当位置复制到文件的尾部(这里的字母顺序不能颠倒)
    yy or :y    复制整行
    nyy        从当前行开始,向前复制n行。(这里的字母顺序不能颠倒)
                如:3yy  从当前行开始向前复制3行
   粘贴操作是插入先前剪切板中的内容
    p(小写)    在当前光标的后面粘贴剪切板中的内容
    P(大写)    在当前光标的前面粘贴剪切板中的内容
    np        粘贴n次,p可以是大写,也可以是小写
                如3p  在当前光标的后面连续粘贴3次相同的内容
   
    上面讲了vi的进入,退出及编辑命令,在vi中,是不能用鼠标的,因此,我们还得来学一些导航命令,以让我们可以将光标定位在我们感兴趣的位置上。
   Ctrl-b        向上滚动一屏
   Ctrl-f     向下滚动一屏
   0(zero)    移动当前行的开始
   $        移动当前行的末尾
   ^        移动到当前行第一个非空白字符处
   $        移动到当前行的末尾
   b,B        向后滚动一个单词,以空白作为分隔符
   G        移动到文件的尾部(相当于Shift-g)
   nG or :n      从当前文件的开始行向前移动n行,
                如:1 Shift-g 将光标定位在当前文件的第一行
   h        向左移动一个字符
   H        移动到屏幕的顶部
   j        向下移动一行
   k        向上移动一行
   l        向右移动一个字符
   L        移动到屏幕的底部
   M            移动到屏幕的中间
   w,W        向前移动一个单词,光标在单词的开始处;白作为分隔符。
   e,E             向前移动一个单词,光标在单词的末尾处;白作为分隔符。
   {         向后移动一段
   }         向前移动一段
   (         向后移动一句话
   )           向前移动一句话
范围
  当用:s命令去查找并替换多行时,常需要指定其范围,如::3,7表示从第三行到第七行,以下是一些常用的范围格式:
    :n ,m        从第n行到第m行
     :.           当前行
    :$           最后的一行
    :?c          Marker c
    :%           所有的行
    .,$           从当前位置到结尾
    :g/pattern/  所有匹配的行
    %    这是一个特殊用途的命令。将光标放在 [, {, (上,然后按下‘%‘,光标就会自动跳到匹配的字符],},)上,并高亮显示(一般用在调试程序中)。
例如:
  删除第三到第七行的内容:
  :3,7d
  给文件的所有行加上注释
  :%s/^/#/
  将文件的所有行取消注释
  :%s/^#//
查找
   这下面的命令是用来查找文本的:
   /pattern    向前查找字符串,也可用正则表达式
   ?pattern    向后查找字符串,也可用正则表达式
   n        重做上次的查找操作(从当前光标向下查找匹配的位置)
   N        重做上次的查找操作在相反的方向(从当前光标向上查找匹配的位置)
  例如:
   查找以字母a开头,后面为两个任意字符的单词
   /a.. or ?a..
  
替换
   :s/pattern/string/flags     用 string替换pattern
   :s是完成查找和替换的标志
   常用的flags(可选)有g和c
   g         是一个全局参数,表示所有,或者是全部
   c         只做一次,在替换之前并给出提示
   &        重做上一次的查找替换操作(须用一些导航命令将光标定位在需要替换的字符处)
   
   例如:
   用script替换scrit,从第一行到文件的结尾:
     :1,$ s/scrit/script/g
         这参数g表示在指定范围内替换全部,如果没有给定参数g,则只替换一次。
   查找aple并将它替换为apple; 查找范围:当前光标到文件的末尾
     :.,$s/aple/apple/g   (在$与s之间,有无空格都是正确的)
   在文件中查找并替换有以下两种方法:
    :%s/from/to/g
    :g/from/s//to/g
    说明:from是被替换的字符,to是用来替换的字符
正则表达式:
. (点)       任意单个字符,除了新行
*           匹配 0次或多次
[...]         匹配括号里的任意一个字符
[^ ...]       不匹配括号里的任意一个字符
^        开始标志
$         结束标志
\       前一个表示单词的开始,后一个表示单词的结束
\(: : :\)      分组(放进内存)
\n           n组的内容(从内存里调用)
如:查找以字母a或A开头,第二个字符任意,三个字符为c的单词
/[aA].c/
文件
   !!program    程序运行的结果来替换当前行的内容
   :r!command   从shell命令里读取输出值。
        如::r!which perl
其它命令   
  Ctrl-]        打开超链接
  Ctrl-T        返回到打开超链接之前的文本
  :se nu         在各行的前面显示行数
  :se nonu       撤消显示行数
  .             重做上一次文本改变的命令。假如你刚做过粘贴操作,按下‘.’,将继续做粘贴操作
  u            撤消上一次的操作;假如你上次做了粘贴操作,这个命令将会撤消上次的粘贴操作
  U         撤消在一行中所做的所有更改。(这个命令的作用范围在一行)
  ctrl-l        刷新窗口
  
  以下是一个非常有趣的命令,有时你想把你输入的内容,原封不动的复制n遍,而你不想用上面的关于复制,粘贴的命令。以下的操作将会在你输入完内容后,自动重复n次你先前做的内容:
假如你想把你即将要输入的内容,自动重复3遍:
第一步:输入 ‘3i‘(’i’表示进入插入模式)
第二步:输入你想输入的内容
  (假定为以下内容:
     #awk '$36 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
                                                                                
     #note: don't appent the $ after the regular expression)
第三步:按下键,得到的结果如下:
   #awk '$36 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
                                                                                
     #note: don't appent the $ after the regular expression)#awk '$36 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
                                                                                
     #note: don't appent the $ after the regular expression)#awk '$36 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
                                                                                
     #note: don't appent the $ after the regular expression)
     
当然,你也可以将i 改为o或a   
做完了上面的命令,是不是感到对vi命令已经有了一个清楚的认识了;也许你会想,既然不能用鼠标,那能不能像鼠标一样,通过按下鼠标左键,就可选定想选定的内容呢,答案是肯定的。现在让我们来看看如何做到:
  假如你想选定一行中的某一部分,并将它复制,然后粘贴到你想粘贴的位置:
  第一步:将光标定位在你想选定的那个位置(通过前面讲的导航命令)
  第二步:按下组合键
  第三步:按方向键,调整并选取所需内容,选中的内容将会以另一种颜色出现,确定选中的内容后,按下'y',就完成了复制操作。
  第四步:将光标定位在你想粘贴的位置,按下p键即可

提示:当你进入插入模式后,你又想对某一句话,或单词进行复制,你必须先按下键,才能进入复制操作的命令;总之:你在插入模式下,想用其它的命令,你都得先按下键。
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/45689/showart_363393.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP