1. 程式人生 > 實用技巧 >高階Linux運維工程師養成記-vim編輯器從入門到進階

高階Linux運維工程師養成記-vim編輯器從入門到進階

高階Linux運維工程師養成記-vim編輯器從入門到進階

高階Linux運維工程師養成記

vim編輯器概述

vim是Linux平臺上功能強大基於模式的文字編輯工具,可以用於文字編輯、指令碼開發、甚至是程式開發等等應用場景。相對於gedit(圖形化介面的文字編輯器)會讓初學者感覺到挺難用,因為要記住大量的命令,但是一旦熟練運用後效率高於其他文字編輯工具。

檢查系統中是否安裝了vim,只需要執行vim命令,如果能夠輸出如下所示的版本資訊,則表示該系統上可以使用vim,退出vim可以使用:q<Enter>

CentOS8.2的vim

如果安裝系統是選擇的最小化安裝,則需要使用yum install -y vim

來安裝vim編輯器

vim編輯器的安裝路徑是/usr/bin/vim

[root@centos8 ~]# which vim
/usr/bin/vim

而安裝包是vim-enhanced-8.0.1763-13.el8.x86_64,CentOS系列可以使用rpm -qf檢視 軟體安裝包的來源

[root@centos8 ~]# rpm -qf `which vim`
vim-enhanced-8.0.1763-13.el8.x86_64

和vim編輯器類似的編輯器還有vi編輯器,它們兩者不是同一個軟體包,vim是vi(Visual Interface)的加強版。

檢視vi編輯器的安裝包

[root@centos8 ~]# rpm -qf `which vi`
vim-minimal-8.0.1763-13.el8.x86_64

vi和vim最大的區別就是可以語法加亮,在編輯文字時會給文字檔案內容增加顏色(和路徑相關)。vim完全相容vi。

vi和vim編輯/etc/passwd檔案

將/etc/passwd檔案複製到/data目錄下,然後使用vim開啟

[root@centos8 ~]# cd /data/
[root@centos8 data]# cp /etc/passwd /data/
[root@centos8 data]# vim /data/passwd 

由於passwd檔案的路徑發生了變化(位於/data目錄下),因此檔案的內容不會有顏色,因為之前vim判斷/etc目錄是系統配置檔案,才會給passwd檔案的內容帶顏色。

vim開啟檔案

使用vim開啟檔案時,可以使用vim [option]... file...開啟,其中常用的選項有

  • +# 開啟檔案後,讓游標處於第#行的行首,+預設是行尾
  • +/PATTERN 讓游標處於第一個被PATTERN匹配到的行首
  • -b file 二進位制方式開啟檔案
  • -d file1 file2 比較多個檔案
  • -m file 只讀方式開啟檔案
  • e 直接進入ex模式

使用vim開啟/data目錄下的passwd檔案,並且預設游標定位在第十行

[root@centos8 data]# vim  +10 /data/passwd


vim +# 定位指定的行數

使用vim開啟/data目錄下的passwd檔案,並且游標定位在以/bin開頭的行

[root@centos8 data]# vim +/^bin /data/passwd


游標定位在以/bin開頭的行

使用vim開啟/data目錄下的passwd檔案,並且游標定位在包含FTP的行

[root@centos8 ~]# vim +/FTP /data/passwd


游標定位在包含FTP的行

使用vim比較兩個檔案的差異

在vim開啟檔案時,如果檔案存在,檔案被開啟並顯示檔案內容,如果檔案不存在,當編輯後第一次存到磁碟時建立它。
首先使用vim建立兩個檔案,source.txt和target.txt,並檢視檔案內容。

在編輯source.txt和target.txt檔案內容時,首先按i進入編輯模式,編輯檔案後按esc退出編輯模式,然後按:進入擴充套件命令模式,並按wq存檔退出。

[root@centos8 data]# vim source.txt
[root@centos8 data]# vim target.txt

[root@centos8 data]# cat source.txt 
this is test content
[root@centos8 data]# cat target.txt 
this is test content
THIS IS TEST CONTENT

編輯source.txt

編輯target.txt

然後使用vim -d source.txt target.txt 比較兩個檔案的差異

如果想要退出可以按esc後使用:切換到擴充套件命令模式然後輸入qall退出文字比較

[root@centos8 data]# vim -d source.txt target.txt 

vim比較source.txt和target.txt檔案的差異

使用vim同時開啟source.txt和target.txt

[root@centos8 data]# vim -o source.txt target.txt 

此時會同時開啟來兩個文字編輯的視窗,在左右兩邊視窗切換,可以先按快捷鍵Ctrl+w 鬆手後再按方向鍵左或者右來切換視窗,退出首先按esc,然後按:進入擴充套件命令模式,輸入qall退出編輯視窗

使用vim以只讀模式開啟source.txt

[root@centos8 data]# vim -m source.txt 

只讀模式提示檔案進位制修改

vim模式

vim編輯器有三種模式,分別是命令列模式(command mode)、編輯模式(edit mode)、擴充套件模式(extended command mode)

  • 命令模式是預設模式,主要用於檢視檔案、移動游標、剪下、貼上文字,無法輸入內容

  • 編輯模式主要用於修改文字

  • 擴充套件模式主要用於儲存退出(:wq)、未修改退出(:q)、強行退出(:q!)等等。

ESC鍵總是用於退出當前模式,兩次ESC鍵總是返回命令模式。

vim模式切換

vim編輯器預設的模式是命令模式

使用vim編輯(檢視)/data目錄下的passwd檔案,此時是命令模式,不能修改檔案

[root@centos8 data]# vim /data/passwd

要修改檔案需要從命令模式切換成編輯模式
命令模式切換成編輯模式可以通過 a、A、o、O、i、I鍵來切換

  • i表示在當前字元之前插入
  • I表示在行首插入
  • a表示在當前字元之後插入
  • A表示在行尾插入
  • o表示在下一行插入(另起一行)
  • O表示上一行插入

編輯模式下編輯/data/passwd檔案


編輯模式新增內容

編輯完成以後按esc可以退出編輯模式,然後按:進入擴充套件命令模式,輸入wq即可儲存修改的內容並且退出vim編輯器。w表示write,q表示quit

修改完成後可以使用只讀的方式檢視

vim命令模式

vim命令模式-游標跳轉

當使用vim開啟檔案時預設就進入了命令模式,在命令模式下可以使用k,j,h,l實現基於字元之間的游標跳轉。

  • k表示游標向上
  • j表示游標向下
  • h表示游標向左
  • l表示游標向右


游標的上下左右移動

在上下左右移動時,如果想要一次性移動多個字元,可以使用數字加k,j,h,l實現。例如3+h(先按3,再按h)表示向左移動3個字元。

vim命令模式下游標跳轉除了基於字元跳轉以外,還可以使用w,e,b來實現單詞間的跳轉

  • w表示下一個單詞的詞首
  • e表示當前或下一個單詞的詞尾
  • b表示當前或者前一個單詞的詞首


單詞詞首和詞尾

還可使用數字+w,e,b實現多個單詞跳轉

vim命令模式下游標跳轉還能再當前頁跳轉,命令模式下當前頁跳轉的常用命令

  • H 頁首
  • M當前頁的中間行
  • L當前頁的頁底
  • zt 將游標所在當前行移動到螢幕頂端
  • zz 將游標所在行移動到螢幕中間
  • zb 將游標所在當前行移動到螢幕底端

當前頁

vim命令模式還可以實現行、句子和段落的跳轉

vim命令模式游標跳轉還可以實現行首行尾跳轉

  • 0 跳轉至游標所在行的行首
  • $ 跳轉至游標所在行的行尾
  • ^ 跳轉至游標所在行行首的第一個非空白字元


行首行尾跳轉

vim命令模式游標跳轉還可以跳轉到指定的行,通過行數+G即可

在vim命令模式下輸入10和大寫字母G跳轉到檔案的第十行


行跳轉

  • gg可以跳到檔案首行的第一個字元

  • G 可以跳到檔案最後一行的第一個字元

  • shfit+( 和shift+)可以實現句子之間的移動,其中(表示上一句,)表示下一句,句子是以.號結尾的內容


使用(和)實現句子之間的跳轉

  • 使用{和}實現段落之間的移動,如果內容之間有空行就形成了段落,其中}表示下一段,而{表示上一段


使用{和}實現段落的跳轉

vim命令模式操作

vim在命令模式下還可以使用相關的命令來完成字元編輯、替換、刪除、複製操作

  • 編輯命令

    • x 刪除游標處的字元
    • number+x 刪除游標處起始的number個字元
    • xp 交換游標所在處的字元以及後面字元的位置(例如im交換之後就是mi)
    • shift+~ 轉換大小寫
    • J 刪除當前行後的換行符
  • 替換命令

    • r 替換游標所在處的字元(單個字元)
      -R 切換成REPLACE模式,此時會替換指定的內容
  • 刪除命令

    • d 刪除命令,可結合游標跳轉字元,實現指定範圍刪除,例如dgg可以刪除游標到行首的內容
    • d$ 刪除到行尾
    • d^ 刪除到非空行首
    • d0 刪除到行首
    • dw 刪除單詞到下一個單詞的詞首
    • de 刪除單詞到下一個單詞的詞尾
    • db 刪除到此到前一個單詞的詞首
    • dd 刪除所在行
    • D: 從當前游標位置一直刪除到行尾,等同於d$

常用的刪除操作是dd,即刪除游標所在的行

  • 複製命令

    • y 複製,可以結合游標跳轉字元,實現指定範圍複製
    • y$
    • y0
    • y^
    • ye
    • yw
    • yb
    • yy 複製行
    • Y 複製整行
  • 貼上命令

    • p 緩衝區存的如果為整行,則貼上當前游標所在行的下方,否則貼上至當前游標所在處的後面
    • P 緩衝區如存的如果為整行,則貼上當前游標所在行的上方,否則貼上至當前游標所在處的前面
  • 改變命令

    • c 修改後切換成插入模式
    • c$ 刪除游標到行首並切換到插入模式
    • c^
    • c0
    • cb
    • ce
    • cw
    • cc 刪除當前行並輸入新內容,相當於S
    • C 刪除當前游標到行尾,並切換成插入模式

命令模式操作文字總結

修改(替換) 刪除(剪下) 複製
cc dd yy
字元 cl dl yl
單詞 cw dw yw
句子頭 c) d) y)
句子尾 c( d( y(
段落頭 c{ d{ y{
段落尾 c} d} y}

命令模式其他命令

  • 100iliu[ESC] 貼上liu 100次
  • 起始位置加命令加結束位置
    • 0 行首
    • y 從這裡開始拷貝
    • $ 行尾
    • gU變大寫
    • gu變小寫
    • y 複製
    • d 刪除


選中行變大寫

  • di" 刪除雙引號""之間的內容
  • yi( 刪除小括號()之間的內容
  • vi[ 游標在[]之間,則選中[]之間的內容
  • dtx 刪除字元直到遇見游標之後的第一個x字元
  • ytx 複製字元直到遇見游標之後第一個x字元

vim編輯模式

vim擴充套件命令模式

使用vim開啟檔案時預設是命令模式,輸入:可以切換成擴充套件命令模式

檔案編輯修改完成後如果要儲存退出,此時需要從編輯模式切換到擴充套件命令模式,輸入冒號(:)即可從編輯模式切換到擴充套件命令模式

切換成擴充套件命令模式後,通常會輸入wq表示儲存修改的檔案內容並退出vim編輯器。

vim在擴充套件命令模式下存檔退出還有其他幾種形式

  • q vim開啟檔案並未做修改,此時可以在擴充套件命令模式下使用q退出
  • q! vim編輯檔案內容後不想儲存修改的內容,可以使用q!退出,會丟失修改的內容
  • w vim編輯檔案內容後儲存檔案內容到磁碟

除了存檔退出以外,vim編輯器的命令擴充套件模式還提供了一些日常運維常用的功能

  1. 使用vim的擴充套件命令模式實現將/etc/issue檔案的內容讀取到/data/passwd檔案中

在擴充套件命令模式下輸入r 然後加上檔案路徑並回車即可


讀取檔案內容到當前檔案中

讀取/etc/issue檔案的內容

讀取之後的檔案內容

  1. 使用vim的擴充套件命令模式實現將/data/passwd檔案另存為passwd.old

在擴充套件命令模式下輸入w 然後加上另存為檔案的名稱並回車即可


檔案另存為

  1. 使用vim的擴充套件命令模式實現檢視之前另存為檔案passwd.old的詳細資訊

在擴充套件命令模式下輸入!ls -l|grep passwd.old 並回車後即可檢視該檔案的詳細資訊,然後按回車可以返回到命令模式


擴充套件命令模式下執行命令
執行命令的結果

  1. 使用vim的擴充套件命令模式讀取核心版本到/data/passwd檔案中

在擴充套件命令模式下使用r!uname -a並回車後即可實現將核心版本資訊寫入檔案


讀取核心版本寫入到/data/passwd檔案中
寫入核心版本資訊成功

vim編輯器的個性化定製