第六周作业

请详细总结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)
上一篇 2017-03-20 22:53
下一篇 2017-03-21 17:49

相关推荐

  • 搜索引擎-倒排索引基础知识

    1.单词——文档矩阵        单词-文档矩阵是表达两者之间所具有的一种包含关系的概念模型,图3-1展示了其含义。图3-1的每列代表一个文档,每行代表一个单词,打对勾的位置代表包含关系。          …

    Linux干货 2015-12-10
  • Linux 发展史

    Linux 发展史 一、Linux 系统概述     首先大家需要明白,Linux 只是内核,没有应用程序,如果想有应用程序就需要GNU 组织来提供应用程序,GNU其实就是一个开源组织,这就要说GNU 和GPL 的概念了,其实GNU可以看作就是软件行业的共产党组织 而GPL 就是共产党宣言 为全人类服务。所以说GNU 和 LIN…

    Linux干货 2016-10-19
  • bash 循环语句for、while、until

    循环执行 循环执行     定义:将某段代码有次数或无次数循环执行多次。     构成要素:退出条件和进入条件     循环的三种语句:for、while、until for循环:      &nbs…

    Linux干货 2016-08-21
  • 使用sudo对用户进行权限管理

    使用sudo对用户进行权限管理 因为root用户权限太大,一般在实际应用的时候 ,为了避免造成错误泛滥和找不到责任人都需要对使用服务器人员进行权限分配,除了系统管理员外,其他人禁止使用root,但可以通过sudo命令,给自己提权。同时通过日志审计进行监控操作,操作如下: 1.禁止普通用户使用su命令到root # usermod -g wheel user0…

    Linux干货 2017-03-26
  • 系统自动化安装的实现及SELINUX的设置

    系统的自动化安装     anaconda:系统安装程序         tui:基于图形库curses的文本窗口         gui:图形窗口     装载根文件系统,并启动…

    Linux干货 2016-09-16
  • Linux基础知识(六)-vim编辑器,crontab计划任务,bash脚本循环

    1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; [root@localhost ~]# cp /etc/rc.d/rc.sysinit /tmp [root@localhost ~]# vim&nbs…

    Linux干货 2016-10-31