高階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模式,此時會替換指定的內容
- r 替換游標所在處的字元(單個字元)
-
刪除命令
- 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編輯器的命令擴充套件模式還提供了一些日常運維常用的功能
- 使用vim的擴充套件命令模式實現將/etc/issue檔案的內容讀取到/data/passwd檔案中
在擴充套件命令模式下輸入r 然後加上檔案路徑並回車即可
讀取檔案內容到當前檔案中
讀取/etc/issue檔案的內容
讀取之後的檔案內容
- 使用vim的擴充套件命令模式實現將/data/passwd檔案另存為passwd.old
在擴充套件命令模式下輸入w 然後加上另存為檔案的名稱並回車即可
檔案另存為
- 使用vim的擴充套件命令模式實現檢視之前另存為檔案passwd.old的詳細資訊
在擴充套件命令模式下輸入!ls -l|grep passwd.old 並回車後即可檢視該檔案的詳細資訊,然後按回車可以返回到命令模式
擴充套件命令模式下執行命令
執行命令的結果
- 使用vim的擴充套件命令模式讀取核心版本到/data/passwd檔案中
在擴充套件命令模式下使用r!uname -a並回車後即可實現將核心版本資訊寫入檔案
讀取核心版本寫入到/data/passwd檔案中
寫入核心版本資訊成功