Chinaunix首页 | 论坛 | 博客
  • 博客访问: 239315
  • 博文数量: 91
  • 博客积分: 2010
  • 博客等级: 大尉
  • 技术积分: 955
  • 用 户 组: 普通用户
  • 注册时间: 2007-08-12 09:38
文章分类

全部博文(91)

文章存档

2017年(1)

2011年(1)

2008年(15)

2007年(74)

我的朋友

分类: LINUX

2007-08-19 16:17:07


精通vi命令
如何启动vi命令呢?
当你在图形模式时,你得先打开终端,然后在shell提示符下输入vi,就可以了。
当然你也可以指定一个文件名;:
$vi script.txt
表示在当前目录下创建了一个空文本文件script.txt

你也可以提供一个或更多个文件。(如果所提供的文件名不存在,则创建)
例如:
  $vi file.txt1 file.txt2
 
  现在让我们来了解如何退出vi,以及保存在vi中所做的修改和如何得到帮助信息。
  退出vi有如下的命令格式:
   :n 当你指定了多个文件时,使用这个命令来编辑下一个文件。
   :q 不保存文件退出.
   : 不保存文件,并强制退出.
   :wq file 保存文件并退出,这里的file代表相对路径的文件名,或者是绝对路径的文件名。
   :w file 保存文件,如果没有指定文件名,就是当前的文件名。
   : 强制保存文件(前提是你对这个文件具有写的权限)。
   :x 保存文件并退出,等价于ZZ命令。
   ZZ 保存文件并退出。
   zz 以当前鼠标位置为准,向前滚动半屏。
   :h 请求帮助
  让我们来看看几个最基本的例子
  假如你想新建一个文件名为script.txt,路径为当前目录。可以在shell模式下,输入如下:
  $vi script.txt
  现在你就进入了vi命令,现在你就可以用上面的退出命令退出了。
 上面的命令只告诉我们如何退出vi,和保存文件,我们还不知如何对文件进行编辑和修改。基本的命令如下:
   插入命令:
   想插入新的内容,得先导航到插入的位置,然后进入修改模式:
    i 在当前鼠样之前进入插入模式,并替换文本。
    I 在行的开始处进入插入模式
    a 在当前鼠标之后进入插入模式,添加或替换文本。
    A 在当前行的末尾进入插入模式。
    o 在当前行的下面插入一个新行
    O 在当前行的上面插入一个新行。
    J 将下一行与当前行合并成一行
    :e file 编辑指定的文件,并退出当前的文件。(file 表示路径加文件名)
    : 重新读取当前文件,并放弃所做的修改。
    :r filename 在当前行处插入一个新的文件
  编辑命令
    C 删除从当前光标到行尾,并进入插入模式。
    cc 删除整行,并进入插入模式。
    ncc     删除n行,并进入插入模式。
    S 删除整行,并进入插入模式。
    s 删除当前光标处的字符,并进入插入模式
    cw 在当前光标处删除一个单词,并进入插入模式。
    ncw 在当前光标处删除n个单词,并进入插入模式。
    R 进入插入模式(一种不同的插入模式),并覆盖已存在的字符,直至按Esc键。
    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个字符
    Ctrl+u    在输入方式下删除整行
    Ctrl+w    在输入方式下向后删除一个单词
    Ctrl+T    在输入方式下, 整行向右移动一个tab符
  复制与粘贴
   复制命令,通常是从一个指定的位置,复制一个文本块,以下是具体的命令:
    yl 向前复制一个字符(这里的字母顺序不能颠倒)
    yw 向前复制一个单词(这里的字母顺序不能颠倒)
    y$ 从当位置复制到行尾(这里的字母顺序不能颠倒)
    yG 从当位置复制到文件的尾部(这里的字母顺序不能颠倒)
    yy or :y 复制整行
    nyy 从当前行开始,向前复制n行。(这里的字母顺序不能颠倒)
                如:3yy 从当前行开始向前复制3行
    :n1,n2 co n3 将n1行到n2行之间的内容复制到n3行下
    :n1,n2 m n3 将n1行到n2行之间的内容移至到n3行下
    :n1,n2 d    将n1行到n2行之间的内容删除
    :r!command 将command的输出结果放到当前行
    :!command 执行shell命令command
    :n1,n2 w!command 将文件中从n1行到n2行之间的内容作为command执行之,若不指定n1,n2,则整个文件夹的内容作为命令的输入
   粘贴操作是插入先前剪切板中的内容
    p(小写) 在当前光标的后面粘贴剪切板中的内容
    P(大写) 在当前光标的前面粘贴剪切板中的内容
    np 粘贴n次,p可以是大写,也可以是小写
                如3p 在当前光标的后面连续粘贴3次相同的内容
   
    上面讲了vi的进入,退出及编辑命令,在vi中,是不能用鼠标的,因此,我们还得来学一些导航命令,以让我们可以将光标定位在我们感兴趣的位置上。
   Ctrl-b 向上滚动一屏
   Ctrl-f 向下滚动一屏
   0(zero) 移动当前行的开始
   $ 移动当前行的末尾
   ^ 移动到当前行第一个非空白字符处
   G 移动到文件的尾部(相当于Shift-g)
   nG or :n 从当前文件的开始行向前移动n行,
                如:1 Shift-g 将光标定位在当前文件的第一行
   h or backspace 向左移动一个字符
   H 移动到屏幕的顶部
   j or Ctrl+n 向下移动一行
   k or Ctrl+p 向上移动一行
   l or space(空格) 向右移动一个字符
   enter        光标下移一行
   L 移动到屏幕的底部
   M 移动到屏幕的中间
   w,W 向前移动一个单词,光标在单词的开始处;白作为分隔符。
   b,B 向后滚动一个单词,以空白作为分隔符
   e,E 向前移动一个单词,光标在单词的末尾处;白作为分隔符。
   { 移动到段落的开头
   } 移动到段落的结尾
   ( 光标移至句首,以句号为准
   ) 光标移至句尾

   shift+(  移到文件的开头

   shift+)  移到文件的结尾

   n+     光标下移n行
   n-     光标上移n行
   n$ 向下移到n行末,从当前行开始记数
范围
  当用: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 '$3<5 {printf "%s\t%s\n",$1,$2;} $3>6 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
                                                                               
     #note: don't appent the $ after the regular expression)
 第三步:按下键,得到的结果如下:
   #awk '
$3<5 {printf "%s\t%s\n",$1,$2;} $3>6 {printf "the price greater than \$6 %s\t%s\n",$1,$2}' 2.txt
                                                                               
     #note: don'
t appent the $ after the regular expression)#awk '$3<5 {printf
"%s\t%s\n",$1,$2;} $3>6 {printf "the price greater than \$6 %s\t%s\n",$1,$2}'
2.txt
                                                                               
     #note: don't appent the $ after the regular expression)#awk '$3<5 {printf
"%s\t%s\n",$1,$2;} $3>6 {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命令已经有了一个清楚的认识了;也许你会想,既然不能用鼠标,那能不能像鼠标一样,通过按下鼠标左键,就可选定想选定的内容呢,答案是肯定的。现在让我们来看看如何做到:
  假如你想选定一行中的某一部分,并将它复制,然后粘贴到你想粘贴的位置:
  第一步:将光标定位在你想选定的那个位置(通过前面讲的导航命令)
  第二步:按下<ctrl-v>组合键
  第三步:按方向键,调整并选取所需内容,选中的内容将会以另一种颜色出现,确定选中的内容后,按下'y',就完成了复制操作。
  第四步:将光标定位在你想粘贴的位置,按下p键即可
 
 提示:当你进入插入模式后,你又想对某一句话,或单词进行复制,你必须先按下<ESC>键,才能进入复制操作的命令;总之:你在插入模式下,想用其它的命令,你都得先按下<ESC>键。


阅读(941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~