第六周作业

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

相关推荐

  • 第二周

    第二周 1. Linux上的文件管理类命令都有哪些,其常用的使用方法及其相关示例演示。 cp 复制文件和目录语法格式:cp [OPTION]… [-T] SOURCE DESTcp [OPTION]… SOURCE… DIRECTORYcp [OPTION]… -t DIRECTORY SOURCE&#8230…

    Linux干货 2017-07-21
  • iptables之nat

    NAT网络地址转换SNAT:修改IP报文中的源IP地址 本地向互联网请求让本地网络中的主机可使用统一地址与外部通信,从而实现地址伪装请求:修改源IP,如果修改则由光梨园定义响应:修改目标IP,由nat自动根据会话表中追踪机制实现相应修改DNAT:修改目标地址转换 外网服务器向其他客户端请求请求:由外网主机发起,修改其目标地址,由管理员定义相应:修改源地址,但…

    2017-11-12
  • Http请求流程

    1、http请求流程 1.连接 当我们输入这样一个请求时,首先要建立一个socket连接,因为socket是通过ip和端口建立的,所以之前还有一个DNS解析过程,把www.mycompany.com变成ip,如果url里不包含端口号,则会使用该协议的默认端口号。 DNS的过程是这样的:首先我们知道我们本地的机器上在配置网络时都会填写DNS,这样本机就会把这个…

    Linux干货 2017-02-13
  • 软件包管理 — rpm & yum

    软件包管理 包管理器     二进制应用程序的组成部分:         二进制文件、库文件、配置文件、帮助文件     程序包管理器:      &…

    Linux干货 2016-08-24
  • Linux下硬连接和软连接的区别

    Linux下硬链接与软链接的区别   链接,是指在计算机文件之间传递参数和控制命令,并把它们组成一个可执行的整体的过程。例如我们常见的windows系统下的“快捷方式”,它是一种链接,人们可以通过它来直接访问计算机上的某个文件,不必逐级在硬盘目录下寻找;互联网上的“超文本链接”,它用文字链接的形式来指向一个页面,人们可以通过此链接快速访问网站的页面…

    Linux干货 2016-10-21
  • DHCP服务介绍及搭建

    DHCP服务介绍及搭建

    2018-01-16