vi 编辑器

vi 编辑器
    vi 是 visual editor 的缩写,是 UNIX 所提供的编辑器之一。它提供使用者一个视窗的编辑环境,在此视窗下,使用者可编辑所要的文件。

    1. 模式
    vi编辑器是一个小巧但功能强大的程序,vi编辑器有三种不同的模式:
    插入模式——这个模式是通过在命令模式按下“i”键进入的。
    命令模式——这是用户输入单键命令的模式。在其他模式中按下ESC键就可以进入命令模式。
    冒号模式——从命令模式输入一个冒号(:)就可以进入这个模式。常见的冒号模式命令有:
        :wq 保存且退出编辑器
        :w  保存但不退出
        :q  退出且不保存
        :q!  强行退出vi,不保存。
        :help 获取帮助

    2. 命令
    2.1 光标之移动
        h   向左移一个字符。
       J   向上移一个字符。
       K  向下移一个字符。
       L  向右移一个字符。
       0  移至该行之首
       $  移至该行之末
        ^  移至该行的第一个字符处
       H  移至视窗的第一列。
       M  移至视窗的中间那列。
       L  移至视窗的最后一列。
       G  移至该文件的最后一列。
       +  移至下一列的第一个字符处
        -  移至上一列的第一个字符处
       (   移至该句之首 (注一)
       )   移至该句之末。
       {   移至该段落之首 (注二)
       }   移至该段落之末
       nG  移至该文件的第 n 列。
       n+   移至光标所在位置之后的第 n 列
       n-    移至光标所在位置之前的第 n 列
       ctrl+f :后翻页
       ctrl+b:前翻页
   视窗最下方会显示该行之行号、文件名称等,在定位错误的时候非常方便
   注一:句子(sentence)在vi中是指以『!』、『.』或『?』结束的一串字。
   注二:段落(paragraph)在vi中是指以空白行隔开的文字。 
  
    2.2 插入与替换
        i 在当前光标处插入, I 行首插入
        a 在当前光标后追加,A 在行末追加
        o 在当前行下插入一行,O在当前行上插入一行
        r 替换当前光标处字符,R从光标处开始替换直到ESC键为止
        s 删除光标所在之字符,并进入输入模式直到ESC键
        S 删除光标所在之该行资料,并进入输入模式直到ESC键
        cc 修改整行的内容,即在删除该行内容的同时保留该行并进入插入模式
     注:在插入模式下可用Enter键换行

     2.3 删除命令
         x   删除光标处字符
        X   删除光标所在之前一字符
        D   以行为单位,删除光标后之所有字符
      dd   删除当前行
      d0   删除光标前半行
      d$   删除光标后半行
        J   将下一行连结至该行末尾

    2.4 剪切与复制
    剪切一行
        在该行执行 dd
        光标移至目的地
        执行 p
    复制一行
        在该行执行 yy
       光标移至目的地
       执行 p

    2.5 指令重复
    在指令模式中,可在指令前面加入一数字 n,则此指令动作会重复执行 n次
    例:
        删除10行  10dd
       复制10行   10yy
       光标下移10行 10j

    2.6 取消(Undo)
         u 恢复最后一个指令之前的结果
        U 恢复光标该行之所有改变

    2.7 查找
        在vi中可查找某一字串s,使光标移至该处
        /s    在光标之后查找该字串
        ?s   在光标之前查找该字串
        注:查找命令是在命令模式下输入的,按Enter键后开始查找,类似于在冒号模式下输入命令
        n     往下继续查找下一个相同的字串
        N    往上继续查找下一个相同的字串

    3  指令
    以下指令都在冒号模式下输入
    3.1  编辑环境的设定
    :set nu     设定行号。
    :set nonu 取消行号设定
    :set ai 自动内缩
    :set noai 取消自动内缩
    自动内缩(automatic indentation):写过程序的人都知道,为了提高程序的可读性,我们需要根据程序的层次在各行代码前面添加一些空格或者tab键,像VS 6.0,VS2008等开发工具均提供了自动排版的功能。以上命令可帮助我们在vi编辑器中设置自动内缩的功能。
    例如:
    在插入模式下输入:
    #include<stdio.h>
    int main()
    {
    《tab》int i;

    //:set nu(在冒号模式下设置自动内缩)

    当敲入以上程序后,我们在冒号模式下设置自动内缩,那么以后每当我们敲Enter键换行时,新的一行前面就会自动添加一个tab键

    3.2  读写资料
    :w 将缓冲区的资料写入磁盘中
    :10,20w test 将第10行至第20行的资料写入test文件
    :10,20w>>test 将第10行至第20行的资料加在test文件之后
    :r test 将test文件的资料读入编辑缓冲区的最后

    3.3  删除、复制及移动
    :10,20d 删除第10行至第20行的资料
    :10d 删除第10行的资料
    :%d 删除整个编辑缓冲区
    :10,20co30 将第10行至第20行的资料复制至第30行之后
    :10,20mo30 将第10行至第20行的资料移动至第30行之后

   3.4 字串搜寻与替换
    s(substitute)指令可搜寻某行列范围,g(global)指令则可搜寻整个编辑缓冲区的资料
    s指令以第一个满足该条件的字串为其替换的对象,若该行有数个满足该条件的字串,也仅能取代第一个,若想取代所有的字串则需加上g参数
   :s/int/void  在当前行搜索int字串,若找到则替换为void
   :1,$s/old/new/g 将文件中所有的『old』替换成『new』
   :10,20s/^/ / 将第10行至第20行资料的最前面插入1个空白
   :%s/old/new/g 将编辑缓冲区中所有的『old』替换成『new』

    4.  系统
    4.1  恢复编辑时被中断的文件
    在编辑过程中,若系统当掉或连线中断,而缓冲区的资料并还未被写回磁盘时,当再度回到系统,执行下列指令即可回复中断前的文件内容。
    vi -r filename

    4.2   编辑多个文件
    vi亦提供同时编辑多个文件的功能,方法如下:
    vi file1 file2 …
    当第一个文件编修完成后,可利用『:w』将该缓冲区存档,而后再利用 『:n』载入下一个文件

    5.  一个简单的C程序实例
    1)  在系统提示符($)下输入命令vi和想要编辑(建立)的文件名
        vi test.c <enter>
    此刻屏幕上会出现 vi 的编辑视窗,同时 vi 会将文件复制一份至记忆体中的缓冲区 (buffer), vi会保留在磁盘中的文件不变,而先对缓冲区的文件作编辑,编辑完成后,使用者可决定是否要取代原来旧有的文件
    2)  按键I进入插入模式。屏幕上看不到字符i,屏幕下方出现--INSERT--字样。
    3)  输入你的程序:
    #include<stdio.h>
    int main()
    {
        printf("Hello World/n");
        return 0;
    }
    4)  按〈Esc〉键,从插入模式进入冒号模式。
    5)  输入wq,保存退出
    6)  在系统提示符($)下输入命令编译连接程序
        cc -o test test.c
    此时在当前目录下就生成了一个名为test的可执行文件,可用ls -l 命令查看
    7)在系统提示符($)下输入命令
        ./test
      程序执行,在屏幕打印:Hello World

注:以上命令均在Sun VirtualBox中的Ubuntu OS下验证过

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值