第六周作業

請詳細總結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.www58058.com/71500

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

相關推薦

  • 重定向和管道

    重定向和管道 今天一起來學習一下重定向的一些相關命令及用法: 我們都知道程序=指令+數據 ,那么我們的數據的輸入(Input)和輸出(Output)是如何實現的呢?!跟小編君一起來看一下吧: 本博文小編君分成了四部分:1.重定向的講解 2.管道符的講解 3.涉及到的一些其他命令 4.練習題 一:重定向 重定向的本質是改變文件的默認位置,即換個地方存儲數據。 …

    2017-08-04
  • rpm和yum

     1、rpm的安裝 rpm {-i|–install} [install-options] PACKAGE_FILE… -v: verbose -h: 以#顯示程序包管理執行進度 rpm -ivh PACKAGE_FILE … [install-options] …

    Linux干貨 2016-08-21
  • Linux上文件管理類命令實例講解

    下面介紹三個文件cp, mv, rm管理命令: cp命令:copy,復制命令 命令格式: cp 源文件 目標文件 復制又分為單源復制和多源復制兩種情況: 單源復制 如果目標文件不存在,創建此文件,并復制數據流到此文件; [root@localhost tmp]# cp yum.log ok [root@localhost tmp]# ls -l total …

    Linux干貨 2018-02-28
  • 馬哥教育網絡班19期第十二周課程練習

    1、請描述一次完整的http請求處理過程; 一次完整的http請求處理過程如下: (1) 建立或處理連接:接收客戶端的請求,建立連接,或是拒絕其請求 (2) 接收請求: 接收來自于網絡的請求報文中對某資源的一次請求的過程時,web服務器也分幾種模型對并發請求進行響應:             &nb…

    Linux干貨 2016-08-11
  • 如何實現本地yum源的共享

    上一篇關于Linux yum客戶端的配置的博客,介紹了如何通過修改本機yum配置文件來訪問網絡或者本地的yun sever, 本文就來介紹一下,如何把我們的本地RPM包像yum sever一樣通過http或ftp網絡方式共享出去。 一、準備好發行版光盤,包,元數據    CentOS-6.8-x86_64-bin-DVD1.iso二、準備…

    2017-06-17
  • apache自動化腳本搭建虛擬主機

    1 基于主機名實現三個虛擬主機 (1).創建網站目錄與測試文件 (2).創建虛擬主機文件(目錄為/etc/httpd/conf.d/下)   (3).修改測試apache主機hosts文件(就不用DNS服務器解析,方便測試),測試httpd配置文件是否有問題,重啟httpd服務   (4)修改測試主機hosts文件(就不用DNS服務器解析…

    Linux干貨 2016-10-09
欧美性久久久久