马哥教育网络班20期+第6周课程练习

vim编辑器使用总结

一、文件的打开与关闭

            打开文件:

                # vim [OPTION]… FILE…

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

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

            关闭文件:

                :q 退出

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

                :wq 保存退出

                :x 保存退出

                :w /PATH/TO/SOMEWHERE

                ZZ: 保存退出;

一、vim的模式:        

            1)基本模式:

                ①编辑模式,命令模式

                ②输入模式

                ③末行模式:

                    内置的命令行接口

            2)各模式之间的转换:

                ①编辑模式 –> 输入模式

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

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

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

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

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

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

                ②输入模式 –> 编辑模式

                    ESC

                ③编辑模式 –> 末行模式

                    :

                ④末行模式 –> 编辑模式

                    ESC

            

二、光标跳转类使用:

           1) 字符间跳转: h, j, k, l            

                    h: 左

                    l: 右

                    j: 下

                    k: 上

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

          2)单词间跳转:

                w:下一个单词的词首

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

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

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

          3)行首行尾跳转:

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

                0: 跳转至行首;

                $: 跳转至行尾;

          4)行间移动:

                #G:跳转至由#指定行;

                G:最后一行;

                1G, gg: 第一行;

          5)句间移动:

                )

                (

          6)段落间移动:

                }

                {

三、vim的编辑命令:

        1)字符编辑:

            x: 删除光标处的字符;

            #x: 删除光标处起始的#个字符;

            xp: 交换光标所在处的字符及其后面字符的位置;

        2)替换命令(r, replace)

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

        3)删除命令:

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

                d$: 删除至行尾

                d^:删除到某一行的第一个字符位置

                d0: 删除至行首               

                dw:从当前位置删除到下一个单词开头

                db :从当前位置删除到前一个单词的开头

                diw:删除光标上的单词 (不包括空白字符)

                daw:删除光标上的单词 (包括空白字符)

                dG :删除到文件末

                dgg:删除到文件首

                dd: 删除光标所在的行;

                dd:多行删除;

       

        4)复制命令(y, yank):

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

                y      在使用v模式选定了某一块的时候,复制选定块到缓冲区用; 

                yy    复制整行(#yy或者y#y ,复制#行,#为数字); 

                y^   复制当前到行头的内容; 

                y$    复制当前到行尾的内容; 

                yw   复制一个word (nyw或者ynw,复制n个word,n为数字); 

                yG    复制至档尾(nyG或者ynG,复制到第n行,例如1yG或者y1G,复制到档尾)

         5)粘贴命令(p, put, paste):

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

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

四、其它编辑操作

            1)可视化模式:(选定内容进行编辑)

                v: 按字符选定

                V:按行行定

                Note:经常结合编辑命令;

                    d, c, y

            2)撤消此前的编辑:(默认50次)

                u(undo):撤消此前的操作;

                    #u: 撤消指定次数的操作;

            3)撤消此前的撤消:

                Ctrl+r

            4)重复前一个编辑操作:

                .

五、翻屏操作:

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

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

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

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

六、 vim中的末行模式:

        内建的命令行接口

        (1) 地址定界

            :start_pos,end_pos

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

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

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

                .: 当前行

                $: 最后一行

                    .,$-1

                %:全文, 相当于1,$

               /pat1/,/pat2/:

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

                    #,/pat/

                    /pat/,$

            使用方式:

                后跟一个编辑命令

                    d

                    y

                    w /PATH/TO/SOMEWHERE: 将范围内的行另存至指定文件中;

                    r /PATH/FROM/SOMEFILE:在指定位置插入指定文件中的所有内容;

        (2) 查找

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

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

                n:与命令同方向;

                N:与命令反方向;

        (3) 查找并替换

            s: 在末行模式下完成查找替换操作

                %s/要查找的内容/替换为的内容/修饰符

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

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

                    修饰符:

                        i: 忽略大小写

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

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

                    s@@@

                    s###

         

七、多文件模式:(文件之间能互相编辑)

       1)vim FILE1 FILE2 FILE3 …

                :next 下一个

                :prev 前一个

                :first 第一个

                :last 最后一个

                :wall 保存所有

                :qall 退出所有

        2)窗口分隔模式:

            vim -o|-O FILE1 FILE2 …

                -o: 水平分割

                -O: 垂直分割

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

        3)单文件窗口分割:

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

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

        4)定制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

            获取帮助:末行模式下使用

                :help 

                :help subject

练习:

1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#;

[root@localhost ~]# cp /etc/rc.d/rc.sysinit /tmp/rc.sysinit
[root@localhost ~]# vim /tmp/rc.sysinit 
:%s/^[[:space:]]\+/#&/g

    

2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;

[root@localhost ~]# cp /boot/grub/grub.conf /tmp/grub.conf
[root@localhost ~]# vim /tmp/grub.conf 
:%s/^[[:space:]]\+//g

3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符

:%s/^#[[:space:]]\+//g

4、为/tmp/grub.conf文件中前三行的行首加#号;

:1,3s/^/#&/g

5、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;

:/gpgcheck=0/s/0/1/
:/enabled=0/s/0/1/

6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202

* */4 * * * cp -r /etc /backup/etc-$(date +%Y%m%d%H%M)

7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402

* * * * *2,4,6 cp -r /var/log/messages /backup/messages_logs/messages-$(date +%Y%m%d)

8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中

* */2 */1 * * grep "^S" /proc/meminfo >> /stats/memory.txt

9、工作日的工作时间内,每两小时执行一次echo "howdy"

* 9-17/2 * * * echo "howdy"

脚本编程练习

10、创建目录/tmp/testdir-当前日期时间; 

#!/bin/bash
#
mkdir /tmp/testdir-$(date +%F-%H-%M-%S)

11、在此目录创建100个空文件:file1-file100

#!/bin/bash
#
declare -i i=1
while (( $i <= 100 )); do
        touch /tmp/file$i
        let i++
done

12、显示/etc/passwd文件中位于第偶数行的用户的用户名;

#!/bin/bash
#
declare -i i=0
declare -i l=$(wc -l /etc/passwd | cut -d" " -f1)
while (( $i <= l )); do
        let i=$i+2
        cat -n /etc/passwd | grep "^[[:space:]]\+$i\>" | awk '{print $2}' | awk -F: '{print $1}'
done

13、创建10用户user10-user19;密码同用户名;

#!/bin/bash
#
for i in {10..19}; do
        useradd user$i
        echo "user$i" | passwd --stdin user$i
done

14、在/tmp/创建10个空文件file10-file19;

#!/bin/bash
#
declare -i i=10
while (( $i <= 19 )); do
        touch /tmp/file$i
        let i++
done

 

15、把file10的属主和属组改为user10,依次类推。

#!/bin/bash
#
for i in {10..19}; do
        chown user$i:user$i file$i
done

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

(0)
mouse015110mouse015110
上一篇 2016-07-17
下一篇 2016-07-17

相关推荐

  • 脚本编程部分_第十周练习

    Q1:写一个脚本: (1) 能接受四个参数:start, stop, restart, status;start: 输出“starting 脚本名 finished.”其余参数类似; (2) 其它任意参数,均报错退出; #!/bin/bash # read -p "The following choices&…

    Linux干货 2017-01-01
  • 网络班N22期第一周博客作业

    一、计算机的组成及功能。  计算机是由硬件系统和软件系统两部分组成的。 1、硬件系统包含:    (1)、主板。又叫主机板(mainboard)、系统板(systemboard)或母板(motherboard),它安装在机箱内,是微机最基本的也是最重要的部件之一,主板一般为矩形电路板,上面安装了组成计算机的主要电路系统,一般有B…

    Linux干货 2016-08-15
  • shell脚本编写-3

    1、for循环 for 变量名 in  列表;do 循环体 done 执行机制:依次将列表中元素赋值给“变量名”;每次赋值后即执一次循环体;直到列表中元素耗尽循环结束 列表生成方式: (1) 直接给出列表 (2) 整数列表: (a){start..end} (b) $(seq [start [step]] end)  (3) 返回列表的命…

    Linux干货 2016-08-18
  • keepalived + LVS-NAT 双主互备模型

        实验环境拓扑图:     备注:内网段使用192.168.91.0/24 网段模拟。外网使用192.168.23.0/24网段模拟 1、两节点上关闭防火墙和selinux。 [root@node1 keepalived]# systemctl stop firewalld…

    Linux干货 2016-03-12
  • N25-第五周博客作业

    1、显示/boot/grub/grub.conf中以至少一个空白字符开头的行; [root@localhost ~]# grep "^[[:space:]]\+" /boot/grub/grub.conf      root (hd0,0)…

    Linux干货 2017-01-06
  • 第五周:grep和find的使用练习

    1、显示当前系统上root、fedora或user1用户的默认shell; grep -E "^(root|fedora|user1)" /etc/passwd | cut -d: -f7 grep -E "^root|fedora|use…

    Linux干货 2016-10-25

评论列表(1条)

  • 马哥教育
    马哥教育 2016-07-17 22:09

    写的很好,排版也很漂亮,可以尝试画一个思维导图来加深记忆,加油