class8 文本处理工具sed和vim编辑器

一、处理文本的工具sed

    Stream EDitor,  行编辑器

    sed是linux上一款比较重要的流编辑器。

    特点:一次处理一行内容,处理完成后,把缓冲区的内容送往屏幕。这样不断重复,直到文件末尾。

    缓存空间:模式空间,当前处理的行存储在临时缓冲区;

                     保持空间,当前行处理完成后,还需要等待后续的处理过程,会将该数据存放的空间。

    Sed 主要用来自动编辑一个或多个文件, 简化对文件的反复操作, 编写转换程序等


     sed 工具

       用法:

           sed [option]… 'script' inputfile…

       常用选项:

            -n :不打印非模式空间的内容,静默模式

[root@6 ~]# sed -n '2p' pass
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@6 ~]# cat pass
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt

            -e:  多点编辑       以后的修改会以之前的修改为基础

[root@6 ~]# sed  -e '1,5d'  -e 's/bin/BIN/' pass
operator:x:11:0:operator:/root:/sBIN/nologin
games:x:12:100:games:/usr/games:/sBIN/nolog
gopher:x:13:30:gopher:/var/gopher:/sBIN/nologin
ftp:x:14:50:FTP User:/var/ftp:/sBIN/nologin
[root@6 ~]# sed -n -e '1,5p' -e '1p' pass
sync:x:5:0:sync:/sbin:/bin/sync
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin

           -f / PATH/TO/SCRIPT_FILE : 从指定文件中读取编辑脚本

           -r:  支持使用扩展正则表达式

[root@6 ~]# sed -r 's@halt@HALT@g' pass
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

           -i:  原处编辑

[root@6 ~]# sed -ir 's@halt@HALT@g' pass
[root@6 ~]# cat pass                                       ###修改源文件
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

    地址定界:

       (1) 不给地址:对全文进行处理

       (2) 单地址:

          #:  指定的行

          /pattern/ :被此处模式所能够匹配到的每一行

[root@6 ~]# sed -n '2p' pass  
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
[root@7 ~]# sed -n '/root/p' pass
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

        (3) 地址范围:

             #,#

[root@7 ~]# sed -n '1,5p' pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

            #,+#

[root@7 ~]# sed -n '1,+2p' pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

 

          /pat1/,/pat2/

[root@7 ~]# sed -n '/^root/,/^adm/p' pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

         #,/pat1/

[root@7 ~]# sed -n '2,/^adm/p' pass
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin

        (4) ~ :步进

            1~2  奇数行

[root@7 ~]# cat -n pass|sed -n '1~2p'
    1	root:x:0:0:root:/root:/bin/bash
    3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
    5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    9	mail:x:8:12:mail:/var/spool/mail:/sbin/nologin

            2~2  偶数行

[root@7 ~]# cat -n pass|sed -n '2~2p'
    2	bin:x:1:1:bin:/bin:/sbin/nologin
    4	adm:x:3:4:adm:/var/adm:/sbin/nologin
    6	sync:x:5:0:sync:/sbin:/bin/sync
    8	halt:x:7:0:halt:/sbin:/sbin/halt

   

   编辑命令:

       d:  删除模式空间匹配的行

       p:  显示模式空间中的内容

       a \text :在行后面追加文本;支持使用\n 实现多行追加

[root@7 ~]# cat -n pass|sed  '2a\abcdp'
    1	root:x:0:0:root:/root:/bin/bash
    2	bin:x:1:1:bin:/bin:/sbin/nologin
abcdp

        i \text :在行前面插入文本;支持使用\n 实现多行插入

[root@7 ~]# cat -n pass|sed  '2i\abcdp'
    1	root:x:0:0:root:/root:/bin/bash
abcdp
    2	bin:x:1:1:bin:/bin:/sbin/nologin

       c \text :替换行为单行或多行文本

[root@7 ~]# cat -n pass|sed  '2c\abcdp'
    1	root:x:0:0:root:/root:/bin/bash
abcdp
    3	daemon:x:2:2:daemon:/sbin:/sbin/nologin

       w /path/to/somefile:  保存模式匹配的行至指定文件

[root@7 ~]# sed -n  '1,2wa'  pass
[root@7 ~]# cat a
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

        r /path/from/somefile:读取指定文件的文本至模式空间中匹配到的行后

[root@7 ~]# sed  '3ra'  pass
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

        =: 为模式空间中的行打印行号

[root@7 ~]# sed  '='  pass
1
root:x:0:0:root:/root:/bin/bash
2
bin:x:1:1:bin:/bin:/sbin/nologin
3
daemon:x:2:2:daemon:/sbin:/sbin/nologin

        !: 模式空间中匹配行取反处理

    [root@7 ~]# cat -n pass|sed -n '1!p'
    2	bin:x:1:1:bin:/bin:/sbin/nologin
    3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4	adm:x:3:4:adm:/var/adm:/sbin/nologin

     s/// :查找替换, 支持使用其它分隔符,s@@@ ,s###

       替换标记:

        g:  行内全局替换

        p:  显示替换成功的行

[root@7 ~]# cat -n pass|sed -n 's/root/ROOT/gp'
    1	ROOT:x:0:0:ROOT:/ROOT:/bin/bash
   10	operator:x:11:0:operator:/ROOT:/sbin/nologin

         w  /PATH/TO/SOMEFILE :将替换成功的行保存至文件中

[root@7 ~]# cat -n pass|sed -n 's/root/ROOT/gpwa'
    1	ROOT:x:0:0:ROOT:/ROOT:/bin/bash
   10	operator:x:11:0:operator:/ROOT:/sbin/nologin
[root@7 ~]# cat a
    1	ROOT:x:0:0:ROOT:/ROOT:/bin/bash
   10	operator:x:11:0:operator:/ROOT:/sbin/nologin


   sed 示例

        sed ‘2p’ /etc/passwd             #第2行多打印一次

        sed -n ‘2p’ /etc/passwd           #只显示第二行

        sed -n ‘1,4p’ /etc/passwd          #只显示1~4行

        sed -n ‘/root/p’ /etc/passwd        #只显示包含root的行

        sed -n ‘2,/root/p’ /etc/passwd       #从2 行开始

[root@7 ~]# sed -n '2,/root/p' /etc/passwd
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

         sed -n ‘/^$/=’ file  显示空行行号

[root@7 ~]# sed -n '/^$/=' a  
3
5
[root@7 ~]# cat a
a
b
c
d

         sed –n –e ‘/^$/p’ –e ‘/^$/=’ file

[root@7 ~]# sed -n -e '/^$/p' -e '/^$/='   a
3
5

         sed ‘/root/a\superman’ /etc/passwd   #在root行后增加superman

[root@7 ~]# sed '/root/a\superman' /etc/passwd
root:x:0:0:root:/root:/bin/bash
superman

        sed ‘/root/i\superman’ /etc/passwd     #在root行前增加superman

        sed ‘/root/c\superman’ /etc/passwd     #用superman覆盖包含root的行

        sed ‘/^$/d’ file                 #删除空行

        sed ‘1,10d’ file                 #删除1~10行

        nl /etc/passwd | sed ‘2,5d’

    [root@7 ~]# nl /etc/passwd | sed '2,5d'
    1	root:x:0:0:root:/root:/bin/bash
    6	sync:x:5:0:sync:/sbin:/bin/sync
    7	shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown

        

        nl /etc/passwd | sed ‘2a\ tea’

[root@7 ~]# nl /etc/passwd | sed '2a\ tea'
    1	root:x:0:0:root:/root:/bin/bash
    2	bin:x:1:1:bin:/bin:/sbin/nologin
tea

       sed 's/test/mytest/g' example          #用mytest替换所有的test

       sed –n‘s/root/&superman/p’ /etc/passwd  单词后

[root@7 ~]# sed -n 's/root/&superman/p' /etc/passwd
rootsuperman:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/rootsuperman:/sbin/nologin

      sed –n‘s/root/superman&/p’ /etc/passwd  单词前

[root@7 ~]# sed -n 's/root/superman&/p' /etc/passwd
supermanroot:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/supermanroot:/sbin/nologin

    sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets    #首先用cat替换dog,然后用lo替换hi

    sed –i.bak ‘s/dog/cat/g’ pets    备份

[root@6 ~]# sed -i.bak '/^ftp/d' pass
[root@6 ~]# cat pass
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nolog
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
[root@6 ~]# cat pass.bak
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nolog
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin nologin:x:4326:4327::/home/nologin:/bin/bash mage:x:4327:4328::/home/mage:/bin/bash wang:x:4328:4329::/home/wang:/bin/bash


  高级编辑命令:

    h:  把模式空间中的内容覆盖至保持空间中

    H :把模式空间中的内容追加至保持空间中

    g:  从保持空间取出数据覆盖至模式空间

    G :从保持空间取出内容追加至模式空间

    x: 把模式空间中的内容与保持空间中的内容进行互换

    n:  读取匹配到的行的下一行覆盖至模式空间

    N :追加匹配到的行的下一行至模式空间

    d:  删除模式空间中的行

    D :删除多行模式的首行

    sed 示例

     sed -n 'n;p' FILE                #显示偶数部分

[root@6 ~]# cat a
1
2
3
4
5
[root@6 ~]# sed -n 'n;p' a
2
4

      sed '1!G;h;$!d' FILE               #逆序显示    

[root@6 ~]#  sed '1!G;h;$!d' a
5
4
3
2
1

     sed '$!N;$!D' FILE                 #显示正序最后两行

[root@6 ~]# sed '$!N;$!D' a
4
5

     sed '$!d' FILE                    #显示尾行

[root@6 ~]# sed '$!d' a
5

     sed ‘G’ FILE                    #在每行后加空行

[root@6 ~]# sed 'G' a
1
2
3
4
5

    sed ‘g’ FILE                      #将所有行变为空行显示

[root@6 ~]# sed 'g' a

    sed ‘/^$/d;G’ FILE                  #将原文件空行删除,为每行重新添加一个空行

[root@6 ~]# sed '/^$/d;G' a
1
2
3
4
5

   sed 'n;d' FILE                       #显示奇数行

[root@6 ~]# sed 'n;d' a
1
3
5

   sed -n '1!G;h;$p' FILE                  #逆序显示文档

[root@6 ~]# sed -n '1!G;h;$p' a
5
4
3
2
1


二、vim 编辑器

    简介

            vim编辑器是linux上一款出色的文本编辑器,功能强大,现在学习的仅是冰山一角,已经可以感觉出它的魅力所在。

            功能强大意味着操作命令,方式繁多;对于初学者不友好。但是,如果可以熟练使用,可以说是如虎添翼。

    vi: Visual Interface ,文本编辑器

    文本:ASCII, Unicode

    文本编辑种类:

    行编辑器: sed

    全屏编辑器:nano, vi

                vim – Vi Improved

          其他编辑器:

    gedit:一个简单的图形编辑器

    gvim:一个 Vim 编辑器的图形版本


    打开文件

     # vim  [OPTION]… FILE…

    +#:  打开文件后,直接让光标处于第# 行的行首

    +/ PATTERN :打开文件后,直接让光标处于第一个被PATTERN 匹配到的行的行首

    vim + file  直接打开file, 光标在最后一行

    vim –b file  二进制方式打开文件

    vim –d file1 file2… 比较多个文件

[root@6 ~]# vim -d pass pass1

2016-8-10 2.JPG

    vim -m file 只读打开文件,不做修改

         ex file 或 vim –e 直接进入ex 模式

     [root@6 ~]# vim -d pass pass1
[root@6 ~]# vim -e pass
"pass" 8L, 342C
进入 Ex 模式。输入 "visual" 回到正常模式。

    如果该文件存在,文件被打开并显示内容

    如果该文件不存在,当编辑后第一次存盘时创建它

 关闭文件

    扩展模式:


    :q  退出

    :q!  强制退出,丢弃做出的修改

    :wq  保存退出

     😡  保存退出  

    

    命令模式:


    ZZ:  保存退出

    ZQ:不保存退出


vim 模式

    vim :一个模式编辑器

           三种主要模式:

    命令模式(默认):移动光标,剪切/ 粘贴文本

    插入(编辑)模式:修改文本

    扩展命令模式 :保存,退出等

         编辑模式—输入模式—末行模式

         命令模式—插入模式—扩展模式

   模式转换

     命令模式 –>  插入模式

        i: insert,  在光标所在处输入

        I :在当前光标所在行的行首输入

        a: append,  在光标所在处后面输入

        A :在当前光标所在行的行尾 输入

        o:  在当前光标所在行的下方打开一个新行

        O :在当前光标所在行的上方打开一个新行

     插入模式 —->  命令模式

          ESC

     命令模式 —->  扩展模式

           :

     扩展模式 —->  命令模式

             ESC   ESC

      锁定和解锁:

                        CTRL+s,  锁定

                        CTRL+q   解锁

  命令模式光标跳转

    字符间跳转:

        h: 左  l: 右  j: 下  k: 上

    #COMMAND :跳转由# 指定的个数的字符;

        5h,

        6l,

        7j,

        8k

    单词间跳转:   WEB

        w :下一个单词的词首

        e :当前或下一单词的词尾

        b :当前或前一个单词的词首

    #COMMAND :由# 指定一次跳转的单词数

        5w,

        6e

        7b

    当前页跳转:

           H :页首

           M:页中间行

            L  : 页底

          

    行首行尾跳转:

        ^:  跳转至行首的第一个非空白字符;

        0:  跳转至行首

        $:  跳转至行尾

    行间移动:

           #G 、

           扩展模式:#  :跳转至由# 指定行

           G :最后一行

           1G, gg:  第一行

    句间移动:

           ) :下一句 ( :上一句

    段落间移动:

           }: 下一段 { :上一段

    命令模式翻屏操作  BFUD

            Ctrl+b:  向文件首部翻一屏

          Ctrl+f:  向文件尾部翻一屏

            Ctrl+u :向文件首部翻半屏

          Ctrl+d:  向文件尾部翻半屏


命令模式操作

   字符编辑

    x: 删除光标处的字符;

    #x: 删除光标处起始(后)的#个字符

    5x

    6x

    xp: 交换光标所在处的字符及其后面字符的位置 #xp:多个字符替换位置

        #command  

abcdef      xp  
bacdef
abcdef      5xp  
fabcde

 

    ~: 转换大小写

       #command  

abcedf         ~  光标所在处的字符
Abcdef
abcedf        6~  
ABCDEF

  替换命令(r, replace)

    r:  替换光标所在处的单个字符

      #command

123456  ra      光标所在处的字符
a23456
uucp:x:10:14     3r5
555p:x:10:14

    R: 切换成REPLACE 模式(连续输入替换

123456        	RABCDEFG
ABCDEF  
           -- 替换 --

  删除命令

    d: 删除命令,可结合光标跳转字符,实现范围删除;

    d$:  删除到行尾

    d^: 删除 到非空行首

    d0: 删除到行首

    dw:

    de:

    db:

        #COMMAND  +方向键      删除方向指向行和字符

                                  ↔    #个字符

                                  ↕     #行

      dd:  删除光标所在的行

           #dd :多行删除(之后的行)

      D: 从当前光标位置一直删除到行尾,留空行,等同于d$

   复制命令(y, yank):

    y:  复制,行为相似于d 命令

    y$

    y0

    y^

    ye

    yw

    yb

     #y   光标以下#行,不包括光标所在行

     yy :复制行

     #yy:  复制多行

                 Y:  复制整行

   粘贴命令(p, paste):  P

                        p

    p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面

    P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面        

           

P 整行,当前光标所在行的上方
其他,当前光标所在处的前面
整行,当前光标所在行的下方 p
其他,粘贴至当前光标所在处的后面

   改变命令(c, change)

        c:  修改后切换成插入模式

        命令模式 –>  插入模式

        c$

        c^

        c0

        cb

        ce

        cw

          #COMMAND  +方向键    删除方向指向行和字符

                              ↔    #个字符

                              ↕    #行

        cc :删除当前行并输入新内容

            #cc:

        C :删除当前光标到行尾,并切换成插入模式

  命令模式

     100iwang [ESC]      粘贴“wang ”100次


     <start position><command><end position>

      Command:

      y  复制、d  删除、gU  变大写、gu  变小写

    例如 0y$  命令意味着:

    0 → →  先到行头

    y → →  从这里开始拷贝

    $ → →  拷贝到本行最后一个字符

     ye  从当前位置拷贝到本单词的最后一个字符

uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin         #0gU$
UUCP:X:10:14:UUCP:/VAR/SPOOL/UUCP:/SBIN/NOLOGIN

 撤消更改

    u 撤销最近的更改

    #u 撤销之前多次更改

     U  撤消光标落在这行后所有此行的更改

     Ctrl +r 重做最后的“撤消”更改

    . 重复前一个操作

    n. 重复前一个操作n次

      5. 执行五次操作


 扩展模式

    按“: ”进入Ex 模式

    创建一个命令提示符:, 处于底部的屏幕左侧

    命令:

    w  写(存)磁盘文件

    wq  写入并退出

    x  写入并退出

    q 退出

    q!  不存盘退出,即使更改都将丢失

    r   filename  读文件内容到当前文件中

      :r  pass

2016-8-10 3.JPG

    w    filename 将当前文件内容写入另一个文件

    !    command           #vim中执行命令, enter退出 。继续编辑文本

    r!   command           #vim中执行命令,并将命令结果存入文本中            

2016-8-10 1.gif

扩展模式:地址定界

    地址定界

    :start_pos,end_pos

    #:  具体第# 行,例如2 表示第2 行;

    #,#:  从左侧# 表示行起始,到右侧# 表示行结尾

    #,+#:  从左侧# 表示的行起始,加上右侧# 表示的行数

       :2,+3 表示2 到5行

    .  :  当前行

    $ :  最后一行

         .,$-1  当前行到倒数第二行

    % :全文,  相当于1,$

        /pat1/,/pat2/

             从第一次被pat1模式匹配到的行开始,一直到第一次被pat2 匹配到的行结束

        #,/pat/

        /pat/,$

             使用方式:后跟一个编辑命令

        d

        y

        w    file:  将范围内的行另存至指定文件中

        r     file :在指定位置插入指定文件中的所有内容

     查找     (与man帮助命令相同) 可以使用正则表达式

        /PATTERN :从当前光标所在处向文件尾部查找

        ?PATTERN :从当前光标所在处向文件首部查找

        n :与命令同方向

        N :与命令反方向

     查找并替换

    s: 在扩展模式下完成查找替换操作

       格式:s/ 要查找的内容/ 替换为的内容/ 修饰符

       要查找的内容:可使用模式

          替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;还 可以使用“&”引用前面查找时查找到的整个内容

        修饰符:

        i:  忽略大小写

        g: 全局替换;默认情况下,每一行只替换第一次出现

        gc: 全局替换,每次替换前询问

            查找替换中的分隔符/ 可替换为其它字符,例如

          %s@/etc@/var@g

          %s#/boot#/#i


 vim寄存器

    有26 个命名寄存器和1 个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。

    用a ,b,…,z 表示, 用寄存器表示,放在数字和命令之间

      如:3"tyy  表示复制3 行到t 寄存器中

              "tp 表示将t 寄存器内容粘贴

      4"aY                                                                                      
复制了 4 行  
     "ap
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
HALT:x:7:0:HALT:/sbin:/sbin/HALT
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
多了 4 行

2016-8-10 4.JPG

    未指定,将使用无命名寄存器

    有10 个数字寄存器,用0 ,1 ,… ,9 表示,0 存放最近复制内容,1 存放最近删除内容。当新的文本变更和删除时,1 转存到2 ,2 转存到3 ,以此类推。数字寄存器不能在不同会 话间共享。

 

 编辑二进制文件

     以二进制方式打开文件

          vim –b binaryfile

[root@6 ~]# vim -b /bin/cat

2016-08-10 1.JPG

     扩展命令模式下,利用xxd 命令转换为可读的十六进制

           :%!xxd

  :%!xxd
0000000: 7f45 4c46 0201 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 3e00 0100 0000 5018 4000 0000 0000  ..>.....P.@.....
0000020: 4000 0000 0000 0000 b8b5 0000 0000 0000  @...............
0000030: 0000 0000 4000 3800 0900 4000 2000 1f00  ....@.8...@. ...
0000040: 0600 0000 0500 0000 4000 0000 0000 0000  ........@.......
0000050: 4000 4000 0000 0000 4000 4000 0000 0000  @.@.....@.@.....
0000060: f801 0000 0000 0000 f801 0000 0000 0000  ................
0000070: 0800 0000 0000 0000 0300 0000 0400 0000  ................
0000080: 3802 0000 0000 0000 3802 4000 0000 0000  8.......8.@.....

    

    编辑二进制文件

    扩展命令模式下,利用xxd 命令转换回二进制

          :%!xxd –r

:%!xxd –r
^ELF^B^A^A^@^@^@^@^@^@^@^@^@^B^@>^@^A^@^@^@P^X@^@^@^@^@^@@^@^@^@^@^@^@^@<b8><b5>^@^@^@^@^@^@
^@^@^@^@@^@8^@     ^@@^@ ^@^_^@^F^@^@^@^E^@^@^@@^@^@^@^@^@^@^@@^@@^@^@^@^@^@@^@@^@^@^@^@^@<f8
>^A^@^@^@^@^@^@<f8>^A^@^@^@^@^@^@^H^@^@^@^@^@^@^@^C^@^@^@^D^@^@^@8^B^@^@^@^@^@^@8^B@^@^@^@^@


 可视化模式

     允许选择的文本块

          v  面向字符

          V 面向行

           ctrl-v  面向块

        -- 可视 --
       -- 可视 行 --  
       -- 可视 块 --

     可视化键可用于与移动键结合使用:

     w ,)  ,},箭头等

    突出显示的文字可以被删除,复制,变更,过滤,搜索 / 替换等

 多文件模式

     vim FILE1 FILE2 FILE3 …

    :next  下一个

    :prev  前一个

    :first  第一个

    :last  最后一个

    :wall  保存所有

    :qall  退出所有

    :wqall

   

 使用多个“窗口”

     多文件分割

    vim -o|-O FILE1 FILE2 …

    -o:  水平分割

    -O:  垂直分割

    在窗口间切换: Ctrl+w, Arrow

[root@6 ~]# vim -o  pass pass1

2016-8-10 5.JPG

     单文件窗口分割:

    Ctrl+w,s: split,  水平分割

    Ctrl+w,v: vertical,  垂直分割

    ctrl+w,q :取消相邻窗口

    ctrl+w,o: 取消全部窗口

    : wqall 退出


定制vim 的工作特性

    配置文件:永久有效

    全局:/etc/vimrc

    个人:~/.vimrc

    扩展模式:当前vim 进程有效

    (1)  行号

    显示:set number,  简写为set nu

    取消显示:set nonumber,  简写为set nonu

     (2)  括号成对匹配

    匹配:set showmatch,  简写为set sm

    取消:set nosm

    (3)  自动缩进

    启用:set ai

    禁用:set noai

    (4)  高亮搜索

    启用:set hlsearch

    禁用:set nohlsearch

    (5)  语法高亮

    启用:syntax on

    禁用:syntax off

    (6)  忽略字符的大小写

    启用:set ic

    不忽略:set noic

    (7)  文件格式

    启用: :fileformat=unix

    不忽略: : fileformat=dos

    (8)  设置文本宽度

    :set textwidth=65 (vim only)

    :set wrapmargin=15

    :help option-list

    :set or :set all

了解更多

    vi/vim 内置帮助

    :help

    :help topic

    Use :q to exit help

    Vimtutor


练习

1 、如何设置tab 缩进为4 个字符

  vim   ~/.vimrc

   set tabstop=4

2016-8-10 6.JPG

2 、复制/etc/rc.d/init.d/functions 文件至/tmp 目录;替换/tmp/functions 文件中的/etc/sysconfig/init 为/var/log;

%s@/etc/sysconfig/init@/var/log@g
###替换之后的
# Read in our configuration
if [ -z "${BOOTUP:-}" ]; then
 if [ -f /var/log ]; then
     . /var/log
 else
   # This all seem confusing? Look in /var/log,

3 、删除/tmp/functions 文件中所有以# 开头,且# 后面至少有一个空白字符的行的行首的# 号;:

%s@^#\([[:space:]]\+\)@\1@g
40 次替换,共 40 行    
:?^#[[:space:]]\+
E486: 找不到模式: ^#[[:space:]]\+

原创文章,作者:lvasu,如若转载,请注明出处:http://www.178linux.com/32819