1. 程式人生 > 實用技巧 >Vim編輯器的詳細用法

Vim編輯器的詳細用法

vim編輯器是Linux系統自帶的編輯器,其操作較一般的編輯器要複雜許多,但熟練運用vim會極大地提升Linux系統下編輯文字的速度。看完本文趕緊去試下吧!

vim模式介紹

vim有三種模式,分別為命令模式(command mode),編輯模式(insert mode)及末行模式(last line mode)。我們在剛進入vim編輯器時為命令模式,在按下a時會進入編輯模式,同時螢幕的左下角會顯示INSERT,此時就可以輸入你想要的文字。在完成輸入操作後,按下Esc鍵會退回到命令模式,此時按下 : 就會進入末行模式,其實就是vim的命令列模式,在此模式按下wq就可以儲存檔案並退出了。

{% note info %}
下文中命令前出現 :

均表示在末行模式中執行
{% endnote %}

vim的基本操作

開啟檔案

開啟單個檔案或者新建單個檔案:

vim FILENAME

不儲存對文章的改動重新編輯檔案 = :q!+vim FILENAME:

:e!

編輯檔案1時不儲存退出編輯檔案2:

:open FILENAME2

多檔案

:sp file      新建視窗開啟 filename 並水平分割視窗
:vsp file     新緩視窗開啟 filename 並垂直分割視窗

Ctrl + ws     水平分割視窗
Ctrl + wv     垂直分割視窗
Ctrl + ww     在視窗間切換
Ctrl + wq     關閉視窗

Ctrl + wh     切換到右側視窗
Ctrl + wl     切換到左側視窗
Ctrl + wj     切換到下側視窗
Ctrl + wk     切換到上側視窗

:qall!        不儲存退出所有視窗

插入

在命令模式下鍵入a,A,i,I,o,O均會使vim進入編輯模式,區別在於:

i       在當前位置的前插入新的字元  
I       在當前行的行首插入新的字元

a       在當前位置的後面插入新的字元  
A       在當前行的行尾插入新的字元

o       在當前行的下面插入一個新行  
O       在當前行的上面插入一個新行  

查詢

/pattern          向下搜尋pattern
?pattern          向上搜尋pattern
vim中搜索特殊字元需要進行轉義包括 . \ * [] / ? ~ $ % ^ *等

游標選擇某個單詞,按住Shift+3,即可把所有的單詞標註出來

n                 切換下一個搜尋結果
N                 切換上一個搜尋結果

:noh              取消搜尋結果的高亮顯示 

替換命令

:s/old/new         用new去替換當前行匹配到的第一個old

:%s/old/new        用new去替換全文各行的第一個old

:s/old/new/g       用new替換當前行的所有old

:s/old/new/g       將全文中的old用new替換

此外還可以指定行數進行替換:
如要替換11-23行所有的old,可以鍵入如下指令:

:11,23 s/old/new/g

若要在23-35行所有行前加4個空格以示縮排,可以鍵入如下指令:

:23,35 s/^/    /g

撤銷與重做

u        撤銷上一步操作  
Ctrl+r   重做,即對撤銷的撤銷

刪除

x        刪除當前字元,即游標在哪個位置就刪除那個位置的字元  
5x       從當前游標開始往後刪除5個字元  
  
X        刪除當前字元前的一個字元  
5X       從當前游標往前刪除5個字元(不包括當前字元)  

d$       刪除當前字元至行尾所有單詞  
d^       刪除當前字元至行首前的所有字元(不包括當前字元)

dw       刪除當前字元至單詞尾部  
daw      刪除游標所在的單詞

dd       刪除游標所在行的整行    
ndd      刪除游標所在行及其下共5行  
  
S        刪除當前行並進入編輯模式 
 
dgg      刪除當前行至文件首部的所有行  效果等同於末行模式下的:1,.d  
dG       刪除當前行至文件尾部的所有行  效果等同於末行模式下的:.,$d($表示最後一行)

末行模式下還可以進行更加複雜的操作而不需要考慮游標的位置
如刪除第11行至34行的操作就可以這樣

:11,34d  

複製貼上

yy       複製游標所在的當前行
5yy      複製游標及下面共5行  
  
yG       複製當前行至文件開始的所有行
ygg      複製當前行至文件結束的所有行  
  
yw       複製當前游標所在處的一個單詞  

J        將下一行內容移動到本行的末尾

同樣的在末行模式下也可以跨行復制,如複製11至34行

:11,34y  

把10至23行的內容移動到56行之後,可以使用

:10,23 m 56

使用p把dd刪除或yy複製的內容粘貼出來

p        在當前行的下面貼上  
P        在當前行的上面貼上  

快速操作

ddp      快速交換當前行及下一行  
yyp      快速複製當前行並貼上

儲存及退出

:wq      儲存並退出  
:x       儲存並退出

:q       直接退出  
:q!      強制退出不做更改  
 
zz       儲存並退出 

移動

移動操作並不常用,畢竟↑↓←→鍵就可以完成而且無需記憶

h   游標向←移動1個字元     10h   游標向←移動10個字元  
l   游標向→移動1個字元     10l   游標向→移動10個字元  
j   游標向↑移動1個字元     10j   游標向↑移動10個字元  
k   游標向↓移動1個字元     10k   游標向↓移動10個字元 

gg   移動到文件頭部,等同於:1 
G    移動到文件尾部,等同於:$

當然你也可以在開啟檔案時就指定行數,比如想開啟檔案時直接到最後一行,可以使用

vim + FILENAME  

開啟檔案直接到哪一行

vim +n FILENAME #開啟檔案直接到第n行,而不用開啟檔案後在移動游標  

視覺化

v              進入視覺化,左下角顯示視覺化或者VISUAL
V              進入可視行,左下角顯示可視行或者VISUAL LINE
Ctrl+v         進入可視塊,左下角顯示可視塊或者VISUAL BLOCK

上述選擇使用上下左右鍵,非滑鼠

d             刪除選中文字
y             複製選中文字
gu            選中區域轉為小寫
gU            選中區域轉為大寫
g~            大小寫互調
>             向右縮排一個單位
<             向左縮排一個單位

其他操作

:!COMMAND執行命令,如:!ls會列出本文件當前目錄的所有檔案而不用退出文件
:suspend或Crtl-Z掛起vim,回到shell,可以使用fg返回vim編輯器 
 
:set nu 設定行號,可將此命令寫入vim的配置檔案/etc/vimrc或者~/.vimrc,就可以保證每次開啟都顯示行數  
  
:set ff=unix 設定文件的dos編碼為unix風格,在vim開啟亂碼時可以嘗試使用該命令修正 

:set syntax=? 設定文件的語言為?,如c,python,sh 
:set syntax獲得目前的文件語言

:set paste  解決複製文字來時縮排亂的問題

複雜註釋

:3,10 s/^/#/g       註釋3至5行
:3,10 s/^#//g       取消註釋3至10行
:1,$ s/^/#/g        註釋整個文件
:1,$ s/^#//g        取消註釋整個文件 #全選整篇文件也可使用%來替換