第六周作业

请详细总结vim编辑器的使用

模式化的编辑器

  • 基本模式:

    编辑模式,命令模式
      输入模式
      末行模式:
      内置的命令行接口;
      打开文件:
      # vim [options] [file ..]
          +#:打开文件后,直接让光标处于第#行的行首;
          +/PATTERN:打开文件后,直接让光标处于第一个被PATTERN匹配到的行的首;
  • 模式转换:

    编辑模式:默认模式
          编辑模式 --> 输入模式:
              i:insert, 在光标所在处输入;
              a: append,在光标在处后方输入;
              o:在光标所在处的下方打开一个新行;
              I:在光标所在行的行首输入;
              A:在光标所在行的行尾输入;
              O:在光标所在处的上方打开一个新行;
    
      输入模式 --> 编辑模式
          ESC
    
      编辑模式 --> 末行模式
          :    
    
      末行模式 --> 编辑模式
          ESC
  • 关闭文件:

    ZZ:保存并退出;
      :q  退出
      :q!  强制退出,不保存此前的编辑操作
      :wq  保存并退出;
          :w, :q
      :x  保存并退出;
      :w /PATH/TO/SOMEFILE        #另存为
  • 光标跳转:

    字符间跳转
          h:左
          j:下
          k:上
          l:右
    
      #COMMAND:跳转由#指定的个数的字符;
  • 单词间跳转

    w:下一个单词的词首;
      e:当前或后一个单词的词尾;
      b:当前或前一个单词的词首;
    
      COMMAND:跳转由#指定的个数的单词;
  • 行间跳转

    #G:跳转至由#指定的行;
      1G, gg:第一行;
      G:最后一行
  • 句间跳转:

    ):下一句
      (:上一句
  • 段间跳转

    }:下一个段落
      {:上一个段落
  • 翻屏:

    Ctrl+f:向文件尾翻一屏
      Ctrl+b:向文件首部翻一屏
      Ctrl+d:向文件尾部翻半屏
      Ctrl+u:向文件首部翻半屏
      Enter:按行向后翻
  • vim的编辑命令:

    字符编辑:
      x:删除光标所在处的字符;
      #x:删除光标所在处起始的#个字符;
    
      xp:交换光标所在处的字符与其后面的字符的位置;
  • 替换命令(replace):

    r:替换光标所在处的字符;
      rCHAR
  • 删除命令:

    d:删除命令,可结合光标跳转字符,实现范围删除;
      d$:删除光标所在处的字符至该行的行尾的字符。
      d^:删除光标所在处的字符至该行的行首的字符。
    
      dw:删除下一个单词的词首;
      de:删除当前或后一个单词的词尾;
      db:删除当前或前一个单词的词首;
      #COMMAND:删除由#指定的个数的单词;
  • dd:删除光标所在处的行;

    #dd:删除光标所处的行起始的共#行;
  • 粘贴命令(p, put, paste):

    p:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的下方;否则,则粘贴至当前光标所在处的后方;
      P:缓冲区中的内容如果为整行,则粘贴在当前光标所在行的上方;否则,则粘贴至当前光标所在处的前方;
  • 复制命令(yank, y):

    y$:复制光标所在处的字符至该行的行尾的字符;
      y^:复制光标所在处的字符至该行的行首的字符;
          y0:复制光标所在的那个字符到该行行首的所有数据;
    
          yw:复制下一个单词的词首;
          ye:复制当前或后一个单词的词尾;
          yb:复制当前或前一个单词的词首;
              #COMMAND:复制由#指定的个数的单词;
          yy:复制一整行
          #yy:复制#行
  • 改变命令(change, c):

    编辑模式 --> 输入模式,实现删除操作;
          c$;c^;c0;cw;ce;cb;                                                            
          #COMMAND
  • cc:删除光标所在的行,并转换为输出模式;

    #cc:
  • 其它编辑操作:

    可视化模式:
      v:按字符选定;
      V:按行选定;
    
          结合编辑命令使用:d(删除), c(改变), y(复制)
    
      撤销(undo)操作:
          u:撤销此前的操作;
          #u:撤销此前的#个操作;
    
      撤销此前的撤销:
          Ctrl+r
    
      重复执行前一个编辑操作:
          .
      vim自带的练习教程:vimtutor
  • vim末行模式: 内建的命令行接口

    (1) 地址定界

    :start_pos[,end_pos]
          #:特定的第#行,例如5即第5行;
          .:当前行;
          $:最后一行;
          #,#:指定行范围,左侧为起始行,右侧为结束行;
          #,+#:指定行范围,左侧为超始行绝对编号,右侧为相对左侧行号的偏移量;
          例如:3,+7
              .,$-1
              1,$
          %:全文 
          /pattern/:从光标所在处起始向文件尾部第一次被模式所匹配到的行;
              /first/,$
          /pat1/,/pat2/:从光标所在处起始,第一次由pat1匹配到的行开始,至第一次由pat2匹配到的行结束之间的所有行;
    
      可同编辑命令一同使用,实现编辑操作:
          d;c;y
    
          w /PATH/TO/SOMEFILE:将范围内的文本保存至指定的文件中;
          r  /PATH/FROM/SOMEFILE:将指定的文件中的文本读取并插入至指定位置;

    (2) 查找

    /PATTERN:从当前光标所在处向文件尾部查找能够被当前模式匹配到的所有字符串;
      ?PATTERN:从当前光标所在处向文件首部查找能够被当前模式匹配到的所有字符串;
          n:下一个,与命令方向相同;
          N:上一个,与命令方向相反;

    (3) 查找并替换

    s:末行模式的命令;使用格式:
          s/要查找的内容/替换为的内容/修饰符
              要查找的内容:可使用正则表达式;
              替换为的内容:不能使用下则表达式,但可以引用;
              如果“要查找的内容”部分在模式中使用分组符号:在“替换为的内容”中使用后向引用;
              直接引用查找模式匹配到的全部文本,要使用&符号;
              修饰符:
                  i:忽略大小写;
                  g:全局替换,意味着一行中如果匹配到多次,则均替换;
    
          可把分隔符替换为其它非常用字符:
              s@@@
              s###
  • vim的多文件功能:

    (1)多文件: vim FILE1 FILE2 …

    在文件间切换:
          :next  下一个
          :prev  上一个
          :first   第一个 
          :last   最后一个             
      退出所有文件:
          :wqall 保存所有文件并退出;
          :wall
          :qall

    (2)多窗口:

    -o:水平分割窗口
      -O:垂直分割窗口
    
      在窗口间切换:Ctrl+w, ARROW
    
      注意:单个文件也可以分割为多个窗口进行查看:
          Ctrl+w, s:水平分割窗口
          Ctrl+w, v:垂直分割窗口
  • 定制vim的工作特性:

    注意:在末行模式下的设定,仅对当前vim进程有效; 永久有效:

    全局:/etc/vimrc
      用户个人:~/.vimrc

    1、行号

    显示:set number, 简写为set nu
      取消显示:set nomber, 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 ~]# sed -i 's@^[[:space:]]@#@' /tmp/rc.sysinit
  • 2、复制/boot/grub/grub.conf至/tmp目录中,删除/tmp/grub.conf文件中的行首的空白字符;

    [root@localhost ~]# sed -i 's@^[[:space:]]\+@@' /tmp/grub.conf
  • 3、删除/tmp/rc.sysinit文件中的以#开头,且后面跟了至少一个空白字符的行行的#和空白字符

    [root@localhost ~]# sed -i 's@^#[[:space:]]\+@@' /tmp/rc.sysinit
  • 4、为/tmp/grub.conf文件中前三行的行首加#号;

    [root@localhost ~]# vim /tmp/grub.conf
      :1,3s@^#@#&@g
  • 5、将/etc/yum.repos.d/CentOS-Media.repo文件中所有的enabled=0或gpgcheck=0的最后的0修改为1;

    [root@localhost /]# vim etc/yum.repos.d/CentOS-Media.repo 
      :%s@\(gpgcheck\|enabled\)=0@\1=1@g
  • 6、每4小时执行一次对/etc目录的备份,备份至/backup目录中,保存的目录名为形如etc-201504020202

    0 */4 * * * /bin/cp -a /etc /backup/etc-"$(date +\%Y\%m\%d\%H\%M)"
  • 7、每周2,4,6备份/var/log/messages文件至/backup/messages_logs/目录中,保存的文件名形如messages-20150402

    0 20 * * 2,4,6 /bin/cp -a /var/log/messages /backup/messages_logs/messages-"$(date +\%Y\%m\%d)"
  • 8、每天每两小时取当前系统/proc/meminfo文件中的所有以S开头的信息至/stats/memory.txt文件中

    0 20 * * * /bin/grep "^S" /proc/meminfo >> /starts/memory.txt
  • 9、工作日的工作时间内,每两小时执行一次echo “howdy”

    0 20  * * 1-5 /bin/echo "howdy"

脚本编程练习

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

    #!/bin/bash
      # Create Date Directory.
      if find /tmp/testdir-$(date +%Y-%m-%d) &> /dev/null; then
          echo "Current Directory exist"
          exit 1 
      else
          mkdir /tmp/testdir-$(date +%Y-%m-%d)
          echo "Date Directory Create sucess"
      fi
  • 11、在此目录创建100个空文件:file1-file100

    #/bin/bash
      #
      for i in {1..100}; do  
          touch /tmp/testdir-2017-03-17/file-$i
      done
  • 12、显示/etc/passwd文件中位于第偶数行的用户的用户名;

    #!/bin/bash
      #
      while read line; do 
          userid=$(echo $line | cut -d: -f3)
          username=$(echo $line | cut -d: -f1)
    
          if [ $[$userid%2] -eq 0 ]; then
              echo "$username, $userid."
          fi  
      done < /etc/passwd
  • 13、创建10用户user10-user19;密码同用户名;

    #/bin/bash
      #
      for i in {10..19}; do  
          if grep "^user$i\>" /etc/passwd ; then
              echo "user user$i exist"
          else
              useradd user$i 
              echo "user$i" | passwd --stdin user$i
          fi  
      done
  • 14、在/tmp/创建10个空文件file10-file19;

    #/bin/bash
      #
      for i in {10..19}; do  
          touch /tmp/file$i
      done
  • 15、把file10的属主和属组改为user10,依次类推。

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

Edit By MaHua

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

(0)
anhui-binbinanhui-binbin
上一篇 2017-03-20
下一篇 2017-03-21

相关推荐

  • Boot目录下内容丢失导致系统无法启动

    Boot目录下内容丢失导致系统无法启动 笔者朋友近期在一次学习过程中不慎将虚拟机中boot目录下内容丢失,导致系统无法启动。当然此前他并不知道是这样,只是应为莫名的弹出框报错所有导致系统无法启动。此后朋友将此故障告知笔者,笔者本身其实也是小白刚刚学习linux不就,但是对这些稀奇古怪的故障感觉很有兴趣,所以笔者就掉进坑里搞了好久才搞出来点眉目来。为了让更多学…

    Linux干货 2016-10-24
  • M22 Centos6上编译安装httpd2.4并实现HTTPS浏览

    随着网络技术的发展,人们对信息安全越来越重视,传统的http浏览互联网的方式由于未经加密,其安全性广为人们诟病,https协议作为加密的互联网解决方案解决了这一问题。下面我就简要说明下如何实现通过https发布web页面的。   实验目的: 模拟Centos6上安装httpd2.4,并实现https加密访问主页 实验器材: Centos6.8虚拟机…

    Linux干货 2017-04-20
  • 基于mysql的数据库分析系统(rsyslog)

    rsyslog:日志收集和存储系统 1.事件在电脑中的日志记录格式为:     日期时间 主机 进程[pid]:事件内容 2.rsyslog的特性:     多线程;     UDP,TCP,SSL/TLS,RELP; &nbsp…

    Linux干货 2016-10-23
  • corosync的高可用——高可用mariadb数据库

    corosync, pacemaker,nfs高可用mariadb 实验环境: 4台CentOS 7 的主机,并关闭的iptalbes和selinux功能 主机1:10.1.43.101 node1 corosync+pacemaker+amp 主机2:10.1.43.102 node2 corosync+pacemaker+amp 主机3:10.1.43.…

    Linux干货 2016-11-24
  • 权限(用户、特殊、ACL)

    root权限(id=0) root无论在什么情况下都有rw权限,但是是否拥有x权限,要分情况: 第一,文件所有者和所属组都无x权限,root也无x权限; 第二,文件所有者和所属组二者任何一个有x权限,root就有x权限。 用户得到的权限 匹配顺序:文件所有者——文件所属组——其他人(从左到右) 用户访问文件,一旦按次序匹配成功,其获得的权限就是匹配选项所对应…

    Linux干货 2017-05-30
  • 一个不想被打断腿的人的学习宣言

    听说不晒学习宣言的会被某人打断腿,忍了好几天,思考了好几天,想了想,还是腿比较重要。废话就不多说了。上图~~!  生命中总要去经历一些,好让自己在老的时候回忆起来,不至于说:“哎,怎么就没有去拼一下呢!”

    Linux干货 2016-10-27