日常 VI 编辑总结

1、常用操作命令

  0:行首 $:行尾

  gg:文档开始处 G:文档结束处

  H/M/L: 移动光标到屏幕的首行、中间一行、尾行

  Ctrl+f/Ctrl+b: 向文件尾翻一屏、首翻一屏

  /word:搜索word     

  n:搜索下一个,N:反方向查找

  dd:删除当前行,10dd删除当前10行,dw:删除当前单词

  yy:复制当前行,10yy复制当前10行

  p:粘贴在光标之后

  u:取消上一次操作                 

  :set nu显示行号

  '':移动光标到上一个标记处

  '.:移动光标到上一次的修改行

2、常用删除、复制、粘贴命令

  yw:拷贝从当前光标到光标所在单词结尾的内容

  y0:拷贝从当前光标到光标所在行首的内容

  dw:删除从当前光标到光标所在单词结尾的内容

  d0:表示删除从当前光标到光标所在行首的内容

  y$:拷贝从当前光标到光标所在行尾的内容

  d$:删除从当前光标到光标所在行尾的内容

  yfa:拷贝从当前光标到光标后面的第一个a字符之间的内容

  dfa:删除从当前光标到光标后面的第一个a字符之间的内容

  D:删除从当前光标到光标所在行尾的内容

  :12,24y:拷贝第12行到第24行之间的内容

  :12,y:拷贝第12行到光标所在行之间的内容

  :,24y:拷贝光标所在行到第24行之间的内容

  --删除命令类似

3、替换命令

:s/aa/bb/g      将当前行所有包含 aa 的字符串中的 aa 替换为 bb

:s/\<aa\>/bb/g  将当前行所有包含 aa 的单词 替换为 bb

:%s/aa/bb/g     将文档中出现的所有包含 aa 的字符串中的 aa 替换为 bb

:12,23s/aa/bb/g 将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb

:12,23s/^/#/   将从12行到23行的行首加入 # 字符

:%s= *$==       将所有行尾多余的空格删除

:g/^\s*$/d      将所有不包含字符(空格也不包含)的空行删除



############MORE: This record from network for collection #############################

进入vi 
        直接执行 vi编辑程序即可: 
        %vi test 
        此刻屏幕上会出现 vi 的编辑屏幕,同时 vi 会将文件复制一份至内存中的缓冲区 (buffer) 。  vi会保留在硬盘中的文件不变,而先对缓冲区的文件作编辑,编辑完成后,使用者可决定是否要取代原来旧有的文件。 
离开vi 
        若在输入模式下,则先利用《ESC》进入指令模式,而后即可选用下列指令 
        离开vi。 
        :q!    离开vi,并放弃刚在缓冲区内编辑的内容。 
        :wq    将缓冲区内的资料写入硬盘中,并离开vi。 
        :ZZ    同wq。 
        :x     同wq。 
        :w     将缓冲区内的资料写入硬盘中,但并不离开vi。 
        :q     离开vi,若文件被修改过,则会被要求确认是否放弃修改的内容。 
                此指令可与:w 配合使用。 

vi 的操作模式 
        vi 提供两种操作模式:输入模式(insert mode)和指令模式(command mode) 
        。当使用者进入 vi 后,即处在指令模式下,此刻键入的任何字符都被视为 
        指令。在此模式下可进行删除、修改等动作。若要输入资料,则需进入输入 
        模式。 
输入模式 
        如何进入输入模式 
                a (append)      由光标之后加入资料。 
                A               由该行之末加入资料。 
                i (insert)      由光标之前加入资料。 
                I               由该行之首加入资料。 
                o (open)        新增一行于该行之下以供输入资料。 
                O               新增一行于该行之上以供输入资料。 

        如何离开输入模式 
                《ESC》 结束输入模式。 
指令模式 
光标的移动 
        h       向左移一个字符。 
        j       向上移一个字符。 
        k       向下移一个字符。 
        l       向右移一个字符。 
        0       移至该行之首 
        $       移至该行之末。 
        ^       移至该行的第一个字符处。 
        H       移至屏幕的第一列。 
        M       移至屏幕的中间那列。 
        L       移至屏幕的最后一列。 
        G       移至该文件的最后一列。 
        +       移至下一列的第一个字符处。 
        -       移至上一列的第一个字符处。 
        (       移至该句之首。 (注一) 
               移至该句之末。 
        {       移至该段落之首。 (注二) 
        }       移至该段落之末。 
        nG      移至该文件的第 n 列。 
        n+      移至光标所在位置之后的第 n 列。 
        n-      移至光标所在位置之前的第 n 列。 
        <Ctrl><g>       会显示该行的行号、文件名称、文件中最末行的行号、光标 
                        所在行号占总行号的百分比。 
        注一:句子(sentence)在vi中是指以『!』、『.』或『?』结束的一串字。 
        注二:段落(paragraph)在vi中是指以空白行隔开的文字。 


屏幕的移动 
        <Ctrl><f>       屏幕往下卷一页。 
        <Ctrl><b>       屏幕往上卷一页。 
        <Ctrl><d>       屏幕往下卷半页。 
        <Ctrl><u>       屏幕往上卷半页。 
        <Ctrl><e>       屏幕往下卷一行。 
        <Ctrl><y>       屏幕往上卷一行。 


删除、复制及修改指令介绍 (此单元较少使用) 
        d(delete)、c(change)和y(yank)这一类的指令在 vi 中的指令格式为: 
        Operator + Scope = command 
        (运算子)   (范围) 
        运算子: 
        d       删除指令。删除资料,但会将删除资料复制到内存缓冲区。 
        y       将资料(字组、行列、句子或段落)复制到缓冲区。 
        p       放置(put)指令,与 d 和 y 配和使用。可将最后delete或yank的资 
                料放置于光标所在位置的行列下。 
        c       修改(change)指令,类似delete与insert的组合。删除一个词组、句 
                子等的资料,并插入新输入的资料。
        范围: 
        e       由光标所在位置至该字符串的最后一个字符。 
        w       由光标所在位置至下一个字符串的第一个字符。 
        b       由光标所在位置至前一个字符串的第一个字符。 
        $       由光标所在位置至该行的最后一个字符。 
        0       由光标所在位置至该行的第一个字符。 
               由光标所在位置至下一个句子的第一个字符。 
        (       由光标所在位置至该句子的第一个字符。 
        {       由光标所在位置至该段落的最后一个字符。 
        }       由光标所在位置至该段落的第一个字符。 


        整行动作 
        dd      删除整行。 
        D       以行为单位,删除光标后的所有字符。 
        cc      修改整行的内容。 
        yy      yank整行,使光标所在该行复制到内存缓冲区。
删除与修改 
        x       删除光标所在该字符。 
        X       删除光标所在之前一字符。 
        dd      删除光标所在该行。 
        r       用接于此指令之后的字符取代(replace)光标所在字符。 
                如: ra 将光标所在字符以 a 取代之。 
        R       进入取代状态,直到《ESC》为止。 
        s       删除光标所在的字符,并进入输入模式直到《ESC》。 
        S       删除光标所在的该行资料,并进入输入模式直到《ESC》。 
移动与复制 
        利用 delete 及 put 指令可完成资料移动的目的。 
        利用 yank 及 put 指令可完成资料复制的目的。 
        yank 和 delete 可将指定的资料复制到内存缓冲区,而通过 put 指令 
        可将缓冲区内的资料复制到屏幕上。 
        例: 
        移动一行        .在该行执行 dd 
                        .光标移至目的地 
                        .执行 p 
        复制一行        .在该行执行 yy 
                        .光标移至目的地 
                        .执行 p 
指令重复 
        在指令模式中,可在指令前面加入一数字 n,则此指令动作会重复执行 n 
        次。 
        例: 
        删除10行                .10dd 
        复制10行                .10yy 
                                .光标移至目的地 
                                .p 
        指标往下移10行  .10j 

取消前一动作(Undo) 
        即复原执行上一指令前的内容。
        u       恢复最后一个指令之前的结果。 
        U       恢复光标该行的所有改变。
查找 
        在vi中可查找某一字符串,使光标移至该处。 
        /字符串           往光标之后寻找该字符串。 
        ?字符串           往光标之前寻找该字符串。 
        n               往下继续寻找下一个相同的字符串。 
        N               往上继续寻找下一个相同的字符串。 
资料的连接 
        J       句子的连接。将光标所在的下一行连接至光标该行的后面。
        若某行资料太长亦可将其分成两行,只要将光标移至分开点,进入输入模式 
        (可利用 a、i等指令)再按《Enter》即可。
环境的设定 
        :set nu                设定资料的行号。 
        :set nonu              取消行号设定。 
        :set ai                自动内缩。 
        :set noai              取消自动内缩。
        自动内缩(automatic indentation) 
        在编辑文件或程序时,有时会遇到需要内缩的状况,『:set ai』即提供自 
        动内缩的功能,用下例解释: 
        .vi test 
        .(进入编辑屏幕后) 
          this is the test for auto indent 
          《Tab》start indent           ← :set ai (设自动内缩) 
          《Tab》data 
          《Tab》data 
          《Tab》data                   ← :set noai (取消自动内缩) 
        the end of auto indent. 
        .注:<Ctrl><d> 可删除《Tab》字符。
ex指令 
        读写资料 
        :w                     将缓冲区的资料写入硬盘中。 
        :10,20w test   将第10行至第20行的资料写入test文件。 
        :10,20w>>test  将第10行至第20行的资料加在test文件之后。 
        :r test                将test文件的资料读入编辑缓冲区的最后。 

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


        字符串搜寻与取代 
        s(substitute)指令可查找某行列范围。 
        g(global)指令则可查找整个编辑缓冲区的资料。 
        s指令以第一个满足该条件的字符串为其取代的对象,若该行有数个满足该条 
        件的字符串,也仅能取代第一个,若想取代所有的字符串则需加上g参数。 
        :1,$s/old/new/g                将文件中所有的『old』改成『new』。 
        :10,20s/^/   /         将第10行至第20行资料的最前面插入5个空白。 
        :%s/old/new/g          将编辑缓冲区中所有的『old』改成『new』。 
恢复编辑时被中断的文件 
        在编辑过程中,若系统当掉或连线中断,而缓冲区的资料并还未 
        被写回硬盘时,当再次回到系统,执行下列指令即可回复中断前 
        的文件内容。 
        %vi -r filename 
编辑多个文件
        vi还提供同时编辑多个文件的功能,方法如下: 
        %vi file1 file2 .. 
        当第一个文件编辑完成后,可利用『:w』将该缓冲区存档,而后 
        再利用 『:n』载入下一个文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值