第六周作业

请详细总结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

相关推荐

  • Linux basics–part1

    一、计算机的组成及其功能 依据冯·诺依曼体系结构,计算机可分为五大部分,CPU的运算器和控制器、内存、输入、输出。 CPU运算器:计算机中执行各种算术和逻辑运算操作的部件。运算器的基本操作包括加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、比较和传送等操作,亦称算术逻辑部件(ALU)。运算器由算术逻辑单元(ALU)、累加器、状态寄存器、通用寄存…

    Linux干货 2017-07-10
  • 马哥教育30期学员开学典礼

         早上背上书包去学校报到,很有一番学生时期去新学校的感觉,既兴奋又紧张,一段新的人生历程即将开始。      大学时曾经劝说我的同学别逃选修课,我说也许你苦学四年的专业比不上一节选修课对你的将来更有用,如今我却用亲身经历验证了这句话,我是通过大学的一堂选修课了解的Linux系统,开源软件,没想到多年后今天的我竟然也要入这行了。       到教室后,…

    2018-03-26
  • 马哥教育网络21期+第十一周练习博客(下)

    马哥教育网络21期+第十一周练习博客(下) 3、描述DNS查询过程以及DNS服务器类别。 DNS:Domain Name Service 通俗的称为地址解析,使用TCP和UDP的53端口,是属于应用层的协议; DNS查询有2种方式:     递归查询:至发送一次请求,就能找到最终的结果的查…

    Linux干货 2016-09-26
  • FHS文件系统

    一、什么是FHS?   Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定义了系统中每个区域的用途、所需要的最小构成的文件和目录,同时还给出了例外处理与矛盾处理。 二、它的来源历史 …

    Linux干货 2016-10-17
  • linux-系统启动和内核管理

    一、Linux 组成及启动过程 Linux: kernel+rootfs    kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能      IPC:Inter Process Communication  &nbsp…

    Linux干货 2016-09-26
  • 文件系统挂载

    文件系统挂载 文件系统管理: 将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为称之为挂载;  解除此关联关系的过程称之为卸载;  把设备关联挂载点:Mount Point mount  卸载时:可使用设备,也可以使用挂载点 umount  注意:挂载点下原有文件在挂载完成后…

    Linux干货 2015-12-16