1. 程式人生 > >vim運維日常必備操作技巧(常用的全有)

vim運維日常必備操作技巧(常用的全有)

一、說明

掌握vim的操作技巧能讓運維的工作事半功倍,本文將羅列出運維日常使用到的操作技巧,不太常用的操作,本文沒有收集,有高要求有興趣的可以百度查閱vim專題

二、常用技巧

1)普通模式:移動游標的操作
G或者(Shift+g):游標瞬移到檔案的最後一行
gg                   :游標瞬移到檔案的第一行,命令等同於“1G”
0(數字0)或者^ :游標瞬移到當前行的行首
$                     :游標瞬移到當前行的行尾
b                     :游標瞬移到當前位置的單詞的單詞首字母處
e                     :游標瞬移到當前位置的單詞的單詞尾字母處
w                    :游標瞬移到當前位置的單詞的下一個單詞的單詞首字母處
f+字母             :游標往右瞬移到指定的“字母處”,如果指定的字母有重複,則預設跳轉到從左至右的第一個
F+字母            :游標往左瞬移到指定的“字母處”,如果指定的字母有重複,則預設跳轉到從右至左的第一個
num+回車鍵   :游標從當前行位置向下移動num行(num是數字)
num+gg          :游標移動到檔案的第num行,命令等同於“num+G”
H或者(Shift+h):游標瞬移到當前視窗最上面的那一行    
M或者(Shift+m):游標瞬移到當前視窗中間的那一行
L或者(Shift+l)  :  游標瞬移到當前視窗最下面的那一行
h或者←          :游標向左移動一個字元
j或者↓           :游標向下移動一個字元
k或者↑          :游標向上移動一個字元
l或者→           :游標向右移動一個字元
<                    :游標所在的一整行向左縮排
>                    :游標所在的一整行向右縮排
2)普通模式:搜尋與替換操作
:/dabiaoge      :從游標位置開始,向下搜尋名為dabiaoge的字串
:?dabiaoge     :從游標位置開始,向上搜尋名為dabiaoge的字串
r                      :用游標選中字元,按下“r”,並輸入替換的新內容,則可以把選中的字元修改成新內容
n                     :從游標位置開始,向下重複前一個搜尋動作
N                    :從游標位置開始,向上重複前一個搜尋動作
:g/A/s//B/g     :把全文符合A的內容全部替換成B,斜線都是分隔符,可用"@"和"#"代替(注意中間s後面是兩個斜線)
:%s/A/B/g      :把全文符合A的內容全部替換成B,斜線都是分隔符,可用"@"和"#"代替(這個操作和“g/A/s//B/g”一模一樣的效果)
:num1,num2s/A/B/gc:在第num1行和第num2行之間尋找A,並且把全部的A替換成B(後面的gc的c表示再次確定,如果確認就輸入y,也可以不用c,如果直接就是g,則是不用確定並且立即生效)
3)普通模式:複製、貼上、刪除等操作
yy                   :複製游標當前所在的一整行
num+yy          :複製從游標所在行的這一行起向下的num行(游標所在的行為第一行)
小p、大P        :小p表示將已複製的資料貼上到游標所在行的下一行;而大P表示將已複製的資料貼上到游標所在行的上一行
dd                   :刪除當前游標所在的一整行
num+dd          :刪除從游標所在行開始向下的num行(游標所在的行為第一行)
u                     :撤銷(回滾)前一個執行過的操作
.                      :就一個點號,表示重複前一個執行過的操作
4)普通模式:高難度的操作
d+aw               :刪除游標所在單詞以及單詞前的一個空格(d就是刪除的指令,aw就是游標所在單詞加上前一個空格)
gUgU              :把游標所在行的一整行的小寫字母全部轉成大寫字母(原本就有的大寫字母則是忽略)
gU+t+字母      :gU就是轉為大寫的操作指令,“t+字母”就是是表示重新定義游標在這一行的位置,而這個字母就是新的游標位置,如果同一行內有多個相同字母,則模式是第一個,表示從游標現在位置開始到“指定字母”這個位置止,之間的凡是小寫的字母全部轉成大寫字母
Ctrl+a             :把游標所在的數字加1
num+Ctrl+a    :把游標所在的數字加num(num是數字,不能是負數和0,必須是正整數)
5)進入編輯模式的命令(一共就六種進入編輯模式的命令鍵)
i                      :在當前游標所在處開始進入編輯模式
a                     :在當前游標所在處的下一個字元處開始進入編輯模式
I                      :在當前游標所在行的行首的第一個非空格符處開始進入編輯模式(與A正好相反)
A                     :在當前游標所在行的行尾最後一個字元處開始進入編輯模式(與I正好相反)
O                    :在當前游標所在行的上一行插入新的一行(也就是把當前游標所在的行下移一行,但是游標還在這一行,並且游標移動到行首)
o                     :不是數字0,是字母o,表示在當前游標所在行的下一行插入新的一行(與O正好相反)
Esc                 :退出編輯模式,切回到命令模式
6)命令列模式的命令
:wq或者x       :退出並儲存
:wq!或者x!     :退出並強制儲存,“!”為強制的意思
:q!                 :強制退出,但不儲存
:num1,num2 w filename     :將第num1行到第num2行的內容儲存到filename這個檔案(filename檔案無須提前建立)
:num1,num2 co num3        :將第num1行到第num2行的內容複製到第num3行的下面
:num1,num2 m num3         :將第num1行到第num2行的內容移動(剪下)到第num3行的下面
:!任意命令            :表示暫時離開vim頁面,轉到執行的那個命令的頁面,例如:!ls /root
:set nu          :所有行都顯示行號
:set nonu      :取消行號(與“set nu”相反)
:vs  filename :以垂直分屏的方式顯示,會左右顯示當前檔案和filename檔案的內容
:sp  filename :以水平分屏的方式顯示,會上下顯示當前檔案和filename檔案的內容
:,$d               :注意最前面有個逗號,表示刪除當前游標所在行以及後面的所有行(游標所在的那一行也刪除)
:num,.d         :注意num和d之間有個逗號和點,表示刪除第num行到游標所在行的內容(游標所在的那一行也刪除)
7)視覺化模式
視覺化模式型別分為三種:字元視覺化、行視覺化、塊視覺化
在普通模式下:按v(小寫),進入字元視覺化
                                                 按V(大寫,也可以Shift+v),進入行視覺化
                                                 按“Ctrl+v”,進入塊視覺化
什麼是視覺化?就是一種控制選擇粒度的方案。
                                                字元視覺化:選擇粒度是一個字元,就是以字元為單位,一次選擇一個字元
                                                行視覺化    :  選擇粒度是一整行,就是為行為單位,一次選擇一行
                                                塊視覺化    :  最強大的選擇粒度,沒有選擇單位,可自由選擇,選擇完的區域形成一個塊,所以叫塊視覺化
下面羅列工作中用到視覺化最常用的操作:
**把連續的幾行程式碼在行首部註釋掉**:
①num1+gg:把游標定位到需要註釋掉的幾行程式碼的首行的行首
②按“Ctrl+v”,進入塊視覺化
③再次執行num2+gg:把游標定位到需要註釋掉的幾行程式碼的末行的行首(如果行數不多,就連續按↓或者j,直到末行為止即可)
④執行“Shift+i”或者I
⑤輸入“#”
⑥按Esc退出     //如果行數比較多,按下Esc不能立即給所選的所有行加上#號,需要等待1~2秒即可

**既然有一次性註釋的方法,那麼也就有一次性取消註釋的方法**:
①num1+gg:把游標定位到需要取消註釋掉的幾行程式碼的首行的行首
②按“Ctrl+v”,進入塊視覺化
③再次執行num2+gg:把游標定位到需要取消註釋掉的幾行程式碼的末行的行首    //如果行數不多,就連續按↓或者j,直到末行為止即可
④執行d刪除,即可刪除所有的“#”

**把連續的幾行程式碼在行尾部加上相同字元(比如C++程式碼是在行尾部加“;”才能生效)**:
①num1+gg:把游標定位到需要加“;”的幾行程式碼的首行的行首
②按“Ctrl+v”,進入塊視覺化
③再次執行num2+gg:把游標定位到需要註釋掉的幾行程式碼的末行的行首  //如果行數不多,就連續按↓或者j,直到末行為止即可
④執行$:游標瞬移到當前行的行尾
⑤執行“Shift+a”或者A
⑥輸入“;”
⑦按Esc退出     //如果行數比較多,按下Esc不能立即給所選的所有行加上;號,需要等待1~2秒即可

**一次性刪除N行程式碼(我知道可用Ndd完成,這裡用行視覺化完成)**
①num1+gg:把游標定位到需要刪除的幾行程式碼的首行的行首
②按“Shift+v”或者V,進入行視覺化
③再次執行num2+gg:把游標定位到需要刪除掉的幾行程式碼的末行的行首  //如果行數不多,就連續按↓或者j,直到末行為止即可
④執行d刪除

**一次性刪除所選內容(這個用Ndd可完成不了,這裡用塊視覺化完成)**
①num1+gg:把游標定位到需要刪除內容的起始行的行首
②執行“f+字母/數字”:跳轉到需要刪除部分的起始位置
③按“Ctrl+v”,進入塊視覺化
④再次執行num2+gg:把游標定位到需要刪除部分的末尾部分所在行的行首  //如果行數不多,就連續按↓或者j,直到末行為止即可
⑤再次執行“f+字母/數字”:跳轉到需要刪除部分的結尾位置
說明:如果行數不是太多,需要刪除的部分全部在一個視窗內,則不用④和⑤那麼麻煩,直接使用“← ↓ ↑→”方向鍵來選定需要刪除的區域即可
⑥執行“d”刪除即可

**既然有新增和刪除,那麼一定也有替換**:
①num1+gg:把游標定位到需要替換內容的起始行的行首
②執行“f+字母/數字”:跳轉到需要替換部分的起始位置
③按“Ctrl+v”,進入塊視覺化
④再次執行num2+gg:把游標定位到需要替換部分的末尾部分所在行的行首  //如果行數不多,就連續按↓或者j,直到末行為止即可
⑤再次執行“f+字母/數字”:跳轉到需要替換部分的結尾位置
說明:如果行數不是太多,需要替換的部分全部在一個視窗內,則不用④和⑤那麼麻煩,直接使用“← ↓ ↑→”方向鍵來選定需要替換的區域即可
⑥執行“r”替換命令
⑦輸入新的字元即可