vim 是一款功能強大的文本編輯器,它是Linux下常用的編輯器之一,對於熟練掌握了 vim 的人來說,用它編輯文件,方便又快捷,能極大的提高工作效率
vim 功能強大,對應的命令也非常的多,對於初學者來說,看到這么多的命令容易打退堂鼓,想當初,自己剛接觸vim的時候,由於不熟悉vim,每一個命令都要上網查閱,真的是舉步維艱
其實,工作中常用的vim命令也就那么些,只需學習這些常用的命令,勤加練習,假以時日定能熟練的掌握它們,進而就能解決大部分的編輯問題
本文結合我自己工作中使用vim的經驗,整理了一些常用的vim命令
vim 的模式
進入vim之后,會有多種不同的模式,模式之間的切換,讓你只需要通過鍵盤,就能完成文本的編輯,這也是vim存在多種模式的原因,vim主要有以下幾個模式
- 正常模式
剛進入vim界面的時候是正常模式,復制、粘貼操作都是在這個模式下進行的
- 插入模式
文本內容輸入,修改是在這個模式下進行的
可以按 i
或者 I
進入到插入模式,在插入模式下,按 esc
會返回到正常模式
- 命令模式
輸入或者修改完之后,需要保存退出,這個時候vim就會進入到命令模式
按 esc
+ :
進入命令模式,再次按 esc
返回正常模式
- 可視模式
可視模式是對文件進行大量重復操作的時候,可以一次性執行完成的功能
可通過 v
、V
、ctrl v
進入可視模式
常用命令
- 打開、保存、另存為、退出
vim file #打開文件
vim #打開臨時文件,保存的時候需要制定文件名
:w #保存
:w file #另存為
:q #退出
:wq #保存並退出
:x #保存並退出
ZZ 或 shift zz #保存並退出
:q! #不保存退出,會丟失數據
例如: vim a.txt
命令打開 a.txt
文件,假如a.txt
存在的話,打開已有的,不存在的話,則會打開一個新的文件
- 光標移動
k、j #光標向上、向下移動一行
h、l #光標向左、向右移動一個位置, l 是字母L的小寫
^ #光標移動到當前行首
$ #光標移動到當前行尾
w #光標向前移動一個單詞
b #光標向后移動一個單詞
gg #光標移動到文件開頭
G 或 shift g #光標移動到文件末尾
n G #光標移動到指定行號的行首, n 表示行號
ctrl f #向下翻一頁
ctrl b #向上翻一頁
分別按 k j h l
能實現光標上下左右移動,鍵盤上下左右箭頭的按鍵也表示方向鍵,它跟 k j h l
有什么區別呢
如果是圖形界面和遠程終端都可以使用,如果是字符終端的時候,鍵盤上下左右箭頭的按鍵有時會出現亂碼,所以最好統一使用 k j h l
- 插入
i #光標前插入
I #當前行首插入
o #當前行后面插入一行,光標移動到插入行的行首,o 是字母,不是數字0
O #當前行前面插入一行,光標移動到插入行的行首,O 是字母,不是數字0
a #當前光標后插入
A #當前行尾插入
小技巧: 當前處於正常模式, 輸入數字 10
,按i
進入插入模式, 接着輸入字母 #
,最后按esc
鍵,此時,在光標所在行會出現 10 個#
字符,相當於插入了10個#
,當你想在文本中插入一行字符作為分割線的時候,就能應用到這個小技巧
- 復制、粘貼、剪切
yy 或 Y #復制光標所在行
n yy 或 n Y #從光標行向下復制 n 行
y$ #復制從光標位置到行尾
y^ #復制從光標位置到行首
yw #復制一個單詞
ynw #復制n個單詞,n為單詞個數
yl #復制光標位置的一個字符, l 是字母L的小寫形式
ynl #從光標位置向右邊復制n個字符, 光標位置也算一個字符
yh #復制光標位置左邊的一個字符,光標位置不計算在內
ynh #從光標左邊位置向左邊復制n個字符,光標位置不計算在內
dd #剪切(刪除)光標所在行
ndd #從光標行向下剪切(刪除)n行
d$ 或者 D #從光標位置剪切(刪除)到行尾
d^ #從光標前一個位置剪切(刪除)到行首
dl #剪切(刪除)光標位置的字符
dnl #從光標位置向行尾方向剪切(刪除)n個字符
dh #剪切(刪除)光標坐標位置的一個字符
dnh #從光標左邊位置向行首方向剪切(刪除)n個字符
dw #剪切(刪除)光標位置的一個單詞
dnw #從光標位置向行尾方向,剪切(刪除)n個單詞,光標位置的單詞也算在內
p #在當前光標后粘貼
P 或 shift p #大寫的字母p, 再當前光標前粘貼
如果是復制一行內容,再按小寫字母p
則是在當前光標下一行進行粘貼,而不是在當前光標后面粘貼,同樣的,如果是按大寫字母P
則是在當前光標上一行粘貼
如果一個單詞比較長,通過dw
剪切一個單詞時,剪切的是光標位置到光標位置單詞的結尾字符串
比如,現有一個字符串 9ssxphu7898%mn ,假如光標位於字符 h 位置,按dw
,此時剪切的字符串是 hu7898%mn
- 刪除、替換字符
x #每次刪除光標處的字符,刪除之后,光標后面的字符串向光標方向移動一個位置
X #每次刪除光標前面一個字符,刪除之后,光標以及后面的字符串會向行首方向移動一個位置
r #替換光標位置的一個字符
替換字符的方法: 光標移動到准備替換的字符位置,按 r
鍵,然后按替換之后的字符鍵,光標位置的字符就被目標字符替換了
- 撤銷、重做
u #撤銷
ctrl r #重做
在多行操作的時候,有時候會出現誤操作,這時候可以按 u
鍵撤銷誤操作
可以多次進行撤銷,當你每按一次 u
鍵的時候,之前做過的操作就會被撤銷一次
如果發現撤銷的時候進行了錯誤的撤銷操作,希望把剛才做過的事情重做一次,可以按 ctrl r
鍵進行重做
- 查找、替換
/string #查找指定字符串,按n向后查找下一個,按N向前查找下一個
/string\c #查找指定字符串,不區分大小寫,按n向后查找下一個,按N向前查找下一個
/string\C #查找指定字符串,區分大小寫,按n向后查找下一個,按N向前查找下一個
:s/old/new #用new字符串替換當前行中第一次匹配達到的old字符串
:s/old/new/g #用new字符串替換當前行中所有的old字符串
:n,ms/old/new #第n行到第m行之間,用new字符串替換每一行中第一次匹配到的old字符串
:n,m/s/old/new/g #第n行到第m行之間,用new字符串替換每一行中所有匹配到的old字符串
:%s/old/new/g #用new字符串替換文件中所有匹配到的old字符串
如果想要像windows上記事本查找替換一樣,每次替換之前有是否替換的確認,只需要在替換命令后面加一個c
字符
上面的例子中,:%s/we/WE/gc
命令是把文件中所有的we
字符串全部替換成WE
字符串,每次替換之前人工確認,如果把命令中的 c
字符去掉,就是自動全部替換功能了
- 執行外部命令
:! cmd #執行cmd命令
:r !cmd #執行cmd命令,把命令的結果插入光標后面一行
上面例子中,輸入 :! date
是在vim中執行 date
命令,命令結果會顯示在下面,再次按 ENTER
鍵回到了vim
當輸入 :r !date
時,```date``命令的結果插入到光標后面一行
- 批量處理
在可視模式下可以對文件進行批量的操作,比如: 批量選中,批量修改
我們平常用的比較多的批量操作是塊可視模式
v #字符可視模式,以字符為單位選擇
V 或 shift v #行可視模式,以行為單位選擇
ctrl v #塊可視模式,以塊為單位選擇
上面例子中,在vim中按 ctrl v
進入塊可視模式,在屏幕的左下角有顯示 --可視 塊--
字樣
接着通過 j k h l
選中了第6行到第9行中,每一行的前三列這一塊字符串
然后按 shift i
切換到插入模式,把前三列字符串修改為 123
,修改的時候只有第6行顯示修改過,修改完之后連續按兩次 esc
鍵,前三列就全部變成了123
緊接着,再次按 ctrl v
進入快可視模式,選中第6行到第9行前兩列,然后按 d
鍵,就把前兩列刪除了
小結
本文介紹了vim的一些常見用法,掌握這些常見用法足夠滿足工作的需要了,關於vim的命令非常多,遠遠不止本文介紹的內容,更多的用法請參考vim文檔