系統基礎之vim工具詳解

vim工具詳解

作為運維人員,每天要面對大量的文件操作,如何使用一個功能強大,操作快捷的文本編輯器,就至關重要.那天,今天給大家詳細的介紹下vim這款編輯器,完全符合我們的要求,下面讓我們一起來看看吧!


概論:


 文本編輯器:

 文本:純文本信息,   ASCII text:  純粹的,不加修飾的文字

 文本編輯種類:

   行編輯器;sed

   全屏編輯器:nano,v,vim

     vi:VIsual interface

     vim:VI Improved

      gedit 一個簡單的圖形編輯器
      gvim 一個Vim編輯器的圖形版本

     


vim基礎使用


vim:

  模式化編輯器

  基本模式:

   編輯模式,命令模式

   輸入模式:

   末行模式

     內置的命令行接口:

vim基礎使用:

 打開文件:

   #vim [options] file… 

     如果事先準備的文件路徑不存在,那么事先創建此文件,把編輯的內容保留在文件中,

     如果文件存在,則打開此文件,默認光標停留在文件的第一行的行首 

     +#:打開文件后,直接讓光標處于第#行的行首

     +/PATTERN:打開文件后,直接讓光標處于第一個被PATTERN匹配到的行首;

     -d file1 file2 : 比較兩個文件的不同:

     -b file :二進制方式打開文件

     -m file : 只讀方式打開文件

     -e file: 直接進入ex模式

 關閉文件:

   編輯模式:

    ZZ:編輯模式下,保存并退出

     ZQ:不保存退出

    末行模式:

    :q 退出 

    :q!強制退出,不保存此前的編輯操作

    ;wq 保存退出     

     :x 保存退出(盡量別用)

     :w /PATH/TO/FILE   另存為  到某個路徑 

  模式轉換:

   三種模式: 編輯(命令) ,輸入(編輯), 末行(擴展命令)  編輯模式: 默認模式 

   

   編輯模式–>輸入模式:

      i: insert   光標所在處輸入

      a:append 在光標所在處的后方輸入

      o: 在光標所在處的下方打開新行,光標處于行首

      I:在光標所在行的行首輸入

      A:在光標所在行的行尾輸入

      O:在光標所現在處的上方輸入

   輸入模式—>編輯模式

      ESC 鍵

   編輯模式–>末行模式:                `            

      使用冒號 :

   末行模式—>編輯模式:

      兩次 ESC 

   鎖定和解鎖:

     Ctrl +s  Ctrl+q

                                  

 


編輯模式命令:


光標跳轉:

   字符跳轉:

    h:左 l:右 j:上 k:下

    # command :命令前加數字,指定跳轉的字符數

   單詞跳轉:

     w:下個單詞的詞首

     e:當前或后一個單詞的詞尾

      b:當前或前一個單詞的詞首

      # command:  跳轉有#指定的個數的單詞                      

   行尾行首

     ^:跳轉至行首的第一個非空白字符

     0:跳轉至行首

     $:跳轉至行首

   行間

     #G 跳轉至#指定的行;

      1G ,gg:跳轉至第一行

     G:跳轉最后一行

   句間

      )  下一句

      (  上一句

      #   

   段間

     { 上一段

     } 下一段


翻屏操作:

  Ctrl+f:向尾翻一屏

  Ctrl+b:向首反一屏

  Ctrl+d:向尾反半屏

  Ctrl+u:向首反半屏

  enter:按行向后翻

字符編輯:

    : 刪除光標所在處字符

    #x:刪除光標所在處起始的#個字符

    xp:交換光標所在處的字符與其后面的字符的位置

替換命令:

    r  :替換光標所在處的字符   r + 字符

刪除命令:

    d:刪除命令,可結合光標跳轉字符,實現范圍刪除

    d$:刪除當前光標所在處到行尾的內容

    d^:刪到非空行首

    d0:刪到行首  

    # dw   刪單詞

    # de   

    # db 

    # command:

    #dd:刪除光標所在整行 支持加數字  刪除內容不會被清除,保留在緩沖區,最后一個可以粘貼 

    

粘貼命令:

    p :緩沖區的內容如果為整行,則粘貼在當前光標所在行的下方,否則,粘貼至當前光標所在的后方;

    P:  緩沖區的內容如果為整行,則粘貼在當前光標所在行的上,否則,粘貼至當前光標所在的前方;

    

復制命令:

    y:復制,工作行為相似與d命令

    ,y$:復制光標到行尾

    y^:復制光標到行首

    y0:      

    # command 

    #yy:復制整行  配合p使用

改變命令:

    編輯模式—–>輸入模式:

     實現刪除操作;        cc刪除整行,在光標處轉換為輸入模式,

     #cc

可視化模式: 

    v按字符選定:

    V: 按行選定

    結合編輯命令使用,d,c,y,p     


撤銷操作:

 u:撤銷此前的操作    默認50個,保存在緩沖區,可被撤銷.

 #u:撤銷此前的#條操作.

 U:撤銷光標落在這行的操作恢復到初始化

 crtl+r: 恢復此前的撤銷操作 重做

 重復執行前一個操作:點號 .    配合數字,#次重復


寄存器操作:

    有26個命名寄存器和1個無命名寄存器,常存放不同的剪貼版內容,可以不同會話間共享。
    未指定,將使用無命名寄存器

     有10個數字寄存器,用0, 1, …, 9表示, 0存放最近復制內容, 1存放最近刪除內容。

    當新的文本變更和刪除時, 1轉存到2, 2轉存到3,以此類推。

    數字寄存器不能在不同會話間共享。

                                                  

vim自帶練習教程:  vimtutor 命令

blob.png


末行模式命令:

vim有內建命令行接口,可以使用命令控制編輯器,運用命令的方式完成眾多功能;

(1)地址定界;

   指明 start_post[enq_pos]

   .:當前行   

   $:最后一行

   #:特定的第#行,例如5及第5行

   #,#:指定行范圍,左側圍起始行,右側圍結束行,右側大于左側

   #,+#:指定航范圍,左側為起始行絕對編號,右側為相對左側行號的偏移量;例如:3+7 從第三行后加7行 一共八行

   .,$-1:當前行到倒數第二行

   1,$:全文    

   %:全文

   /pattern/:光標所在位起始向文件尾部第一個被模式所匹配到的行;

   /first/,$: 第一個被模式所匹配到的行,到最后;

   /patt1/,/patt2/:從光標所在處起始,第一個所由pat1匹配到的行開始,到第一次由pat2匹配到的行結束之所匹配到的所有行

                

   可同編輯命令一同使用,實現編輯操作:

  d:刪除

  y:粘貼

  c:改變

  w /PATH/TO/SOMEFILE:將范圍內的文本保存至指定的文本中;

  r /PATH/TO/SOMEFILE: 將范圍的文件中的文本讀取并插入到指定位置;

  !COMMAND:末行模式下執行其他命令

  R!COMMAND: 末行模式下執行命令,并把結果保存在文件中

            

(2) 查找

   /PATTERN:從當前光標所在處向文件尾部查找能夠被當前模式匹配到的的所有字符串

   ?PATTERN:從當前光標所在處向文件首部查找能夠被當前模式匹配到的的所有字符串

   配合按鍵實現結果翻看:    

     n:下一個,與命令方向相同

     N:上一個,與命令方向相反

            

(3)查找并替換

   s:末行模式的命令,按使用格式:

      s/要查找的內容/替換的為內容/修飾符

      要查找的內容:可使用正則表達式

      要替換的內容:不能使用正則表達式,但可以引用

      如果"要查找的內容"部分在模式中使用分組符號,在"替換為的內容"中使用后向引用

      直接引用查找模式匹配到的全部文本

   修飾符:

    i:查找時忽略大小寫

    g:全局替換,意味著一行中如果 匹配到多次,則均替換;

    可那分隔符替換為其他非常用字符:

       s@@@  ,s###

    實例:

       %s@\<t\([[:alpha:]]\+\)\>@T\1@g                                    
       %s@\<t[[:alpha:]]\+\>@&er@g

    


多文件功能:


vim支持對多文件同時編輯的功能,更加提高運維人員的工作效率;


命令格式

  vim [Options]  file1 file2…

  

   大文件間切換(末行模式):

     :next 下一個

     :prev 上一個

     :first 第一個

     :last 最后一個

   退出所有文件(末行模式):

      :wqall 保存所有文件并退出

      :wall 保存所有文件

      :qall:直接退出所有文件

   多窗口:

      -o:水平分割窗口

        blob.png

      -O:垂直分割窗口

         blob.png

   窗口鍵切換:Ctrl+w,ARROW

     注:單個文件也可以分割為多個窗口進行查看

     Ctrl+w,s :水平分割窗口

     Ctrl+w,v:垂直分割窗口

     Ctrl w +q:取消相鄰窗口

      Ctrl+w+o;取消全部窗口


                                                                     

 


定制vim的工作特性:


每人的使用習慣方式不同,我們可以對vim編輯器進行DIY,根據自己的需要,設定vim的參數;

   注意:設定在末行模式下的設定,僅對當前vim進程有效

   永久有效(修改配置文件):

     全局:/etc/vimrv

     用戶:~/.vimrc

1,行號:

   顯示:set number.簡寫為:set nu

   取消:set nonumber 簡寫為set nonu

2.括號匹配高亮

   匹配: set showmatch,set sm

   取消:set nosm

3縮進

   匹配: set ai

   取消: set noai

4搜索高亮

   顯示: set hlsearch

   取消; set hlsearch

5.語法高亮:

   顯示:syntax on

    取消 syntax off 

6.忽略字符帶小寫

   忽略:set lc

   取消:set nolc

7.獲取幫助:

   :help    

   :help subject

8.文本格式: 

   windowd文本:set fileformat=dos

   linux文本: set fileformat=unix

9.文本寬度:

   左側距寬: set textwidth=65

   右側距寬:  set wrapmargin=15

    


練習:

1.復制/erc/grub2.cfg文件至/tmp目錄中,用查找替換命令刪除/tmp/grub1.cfg文件中以空白字符開頭的行的行首的空白字符                       

:%s@^[[:space:]]\+@@

2.復制/etc/rc.d/init.d/functions文件至/tmp目錄中,用替換查找命令為/tmp/functions文件中的每個空白字符開頭的行的行首加上#

:$s@^[[:space:]]\+[^[:space:]]@#&@g


3.將/etc/yum.repos.d/Centos-Base.repo中文件所有的enabled=0替換成enable=1,所有gpgcheck=0 

:%s@\(enabled\|gpgcheck\)=0@\1=1@g

4,為/tmp/grub2.cfg文件的前三行的行首加上#號;

     :1,3 s@^@#&@

 


課外作業:

   1、如何設置tab縮進為4個字符?

   [root@wen-7 ~]# cat  .vimrc     (編輯vim的局部配置文件)
    set ts=4
    set expandtab

   2、復制/etc/rc.d/init.d/functions文件至/tmp目錄;替換/tmp/functions文件中的/etc/sysconfig/init為/var/log;

    [root@wen-7 ~]# cp /etc/rc.d/init.d/functions /tmp    
    [root@wen-7 ~]# vim /tmp/functions 
    :%s@/etc/sysconfig/init@/var/log@

   3、刪除/tmp/functions文件中所有以#開頭,且#后面至少有一個空白字符的行的行首的#號;   

   [root@wen-7 ~]# vim /tmp/functions 
    :%s@^#[[:space:]]\+@@


                

            

原創文章,作者:wencx,如若轉載,請注明出處:http://www.www58058.com/32155

(0)
wencxwencx
上一篇 2016-08-10
下一篇 2016-08-10

相關推薦

  • Select、Case

    select循環與菜單 select循環主要用于創建菜單,按數字排序list指定的順序排序,并列出在標準輸出,利用PS3列出提示符進行輸入選擇 用法: select VARIABLE in list  do     循環體命令 done PS3提示語定義: 在腳本中腳本代碼的第一…

    Linux干貨 2016-08-21
  • 程序包管理:rpm和yum

    rpm命令                              軟件包管理 程序包管理 一、概述 (一)API:Application Program Interface  應用編程接口 ABI…

    Linux干貨 2016-08-21
  • samba

    FTP,SAMBA,NFS之間的區別 FTP        Windows/linux/unix/macOS等        發布網站,文件共享              Tcp/21 Samba  …

    Linux干貨 2016-11-01
  • 搭建屬于自己的DNS

    1、搭建主renzituo.com服務器     ①、在192.168.10.4主機上安裝bind程序             yum -y install bind   &nbs…

    2017-04-16
  • 20160802課堂作業

    作業: 在/data/testdir里創建的新文件自動屬于g1組,組g2的成員如:alice能對這些新文件有讀寫權限,組g3的成員如:tom只能對新文件有讀權限,其它用戶(不屬于g1,g2,g3)不能訪問這個文件夾。 #groupadd g1 #groupadd g2 #groupadd g3 #useradd -G g2 alice #useradd -G…

    Linux干貨 2016-08-04
  • N25 第四周作業

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 2、編輯/etc/group文件,添加組hadoop。 3、手動編輯/etc/passwd文件新增一行,添加用戶hadoop,其基本組ID為hadoop組的id號;其家目錄為/home/hadoop。 4、復制/etc/sk…

    Linux干貨 2017-01-04
欧美性久久久久