vim的三種工作模式
命令模式、輸入模式和編輯模式的相互轉換,如圖
命令模式:使用 Vim 編輯文件時,默認處於命令模式。在此模式下,可以使用上、下、左、右鍵或者 k、j、h、l 命令進行光標移動,還可以對文件內容進行復制、粘貼、替換、刪除等操作。
輸入模式:在輸入模式下可以對文件執行寫操作。進入輸入模式的方法是輸入 i、a、o 等插入命令,編寫完成后按 Esc 鍵即可返回命令模式。
編輯模式:如果要保存、查找或者替換一些內容等,就需要進入編輯模式。編輯模式的進入方法為:在命令模式下按" :"鍵,Vim 窗口的左下方會出現一個" :"符號后,這時就可以輸入相關的指令進行操作了。操作完按Enter鍵執行,指令執行后會自動返回命令模式。
使用Vim打開文件
為了避免誤操作我們將/etc下的profile復制到/tmp下進行操作,命令如下:
[root@localhost /]# cp /etc/profile /tmp/profile.vim
使用vim 進入profile文件的命令模式
操作 | 功能描述 |
vim profile.vim | 只是打開文件 |
vim +20 /tmp/profile.vim | 打開文件后,直接定位指定行數處 , 例如,打開 /tmp/profile.vim文件時直接進入第 20 行 |
vim +/future /tmp/profile.vim | 打開文件后,直接定位指定行數處 , 例如,打開 /tmp/profile.vim文件時直接定位到"future"字符串所在行 |
打開文件后,接下來開始對文件進行操作。
進入輸入命令模式
從命令模式進入輸入模式可以按下 I、i、A、a 、O、o、等鍵來完成,不同的鍵只是光標所處的位置不同而已。當進入輸入模式后,在 Vim 編輯窗口的左下角會出現"INSERT"標志,這就代表我們可行寫入操作了,在vim中光標是停留在字符上的,例如在光標后面插入就是指在光標所在的字符的后面插入;
操作 | 功能描述 |
i | 在當前光標所在位置插入輸入的文本,光標后的文本相應向右移動 |
I | 在光標所在行的行首插入輸入的文本,行首是該行的第一個非空白字符,相當於光標移動到行首執行 i 命令 |
a | 在當前光標所在位置之后插入輸入的文本 |
A | 在光標所在行的行尾插入輸入的文本,相當於光標移動到行尾再執行 a 命令 |
o | 在光標所在行的下面插入新的一行。光標停在空的行首,等待輸入文本 |
O | 在光標所在行的上面插入新的一行。光標停在空行的行首,等待輸入文本 |
光標移動命令
在由命令模式中 Vim 提供了大量的光標移動命令,這些命令需要在命令模式下執行。
以字符為單位移動
在Vim中通過上、下、左、右方向鍵來移動光標,除此之外還可以通過以下按鍵來移動。
操作 | 功能描述 |
h | 左移一個位置 |
j | 往下一行 |
k | 往上一行 |
l | 右移一個位置 |
以單詞為單位移動
操作 | 功能描述 |
w | 移動光標到下一個單詞的單詞首 |
b | 移動光標到上一個單詞的單詞首 |
e | 移動光標到下一個單詞的單詞尾 |
移動到行尾或者行首
操作 | 功能描述 |
$ | 將光標移至行尾 |
0 或 ^ | 將光標移至行首 |
n$ | 將光標移至當前光標所在行的之后 n 行的行尾 |
移動到一行的指定字符處
操作 | 功能描述 |
fp | 光標定位到字符 p 處。f 命令有一個使用條件,即光標需在指定字符前 |
移動到匹配的括號處(%命令)
操作 | 功能描述 |
% | 將光標移動到與一個"("匹配的")"(對於 [] 和 {} 也是一樣的處,需要將光標先定位在要匹配的符號處 |
移動到指定行處(nG 或 :n 命令)
操作 | 功能描述 |
nG |
將光標快速地定位到指定行的行首 |
:n |
將光標快速地定位到指定行的行首 |
査找指定字符串
操作 | 功能描述 |
命令模式中輸入"/ 要査找的字符串", 再按一下回車鍵 |
從光標所在行開始向下査找指定的字符串 |
命令模式中輸入"?要査找的字符串", 再按一下回車鍵 |
從光標所在行開始向上査找指定的字符串 |
/^Path |
要査找一個以Path 為行首的行 |
Path$ | 要査找一個以 Path 為行尾的行 |
說明:如果匹配的字符串有多個,則可以按"n"鍵向下繼續匹配査找,按"N"鍵向上繼續匹配査找。如果在文件中並沒有找到所要査找的字符串,則在文件底部會出現"Pattern not found"提示.,在査找過程中需要注意的是,要査找的字符串是嚴格區分大小寫的,如果想忽略大小寫,則輸入命令 ":set ic";調整回來輸入":set noic"。如果在字符串中出現特殊符號,則需要加上轉義字符"\"。常見的特殊符號有 \、*、?、\ $ 等。如果出現這些字符,例如,要査找字符串"10$",則需要在命令模式中輸入"/10\$"。
使用Vim進行替換
操作 | 功能 |
x | 刪除光標位置指定的字符 |
dd | 刪除光標所在的行 |
u | 撤銷最近的修改 |
U | 撤銷對當前行上做的所有修改 |
r | 替換光標位置上的一個字符 |
R | 替換從光標位置開始的字符,同時改變vi到文本輸入模式 |
.(點) | 重復上一次的修改 |
%s/源字符串/替換的字符串/g | 替換整篇文檔的字符串,例如: %s/root/liudehua/g 全文査找"root",然后替換成"liudehua" |
替換起始處,替換結束處 s/源字符串/替換的字符串/g | 替換范圍內的字符串,例如:10,20 s/root/liudehua/g 只替換從第 10 行到第 20 行的"root" |
說明:按下"R"鍵替換后,Vim 編輯文件左下角會顯示"REPLACE",進入替換狀態。直到按 Esc 鍵才會退出替換;否則將一直處於替換狀態。
使用 Vim 進行刪除、粘貼、復制
操作 | 功能 |
d | 刪除指定位置的文本,並存到臨時的緩沖區中。可以使用put操作符(p或P鍵)訪問這個緩沖區 |
dd | 刪除整行,通過在前面加上數字來刪除當前光標所在行下的多行 |
dG | 刪除從光標所在行一直到文件末尾的全部內容 |
起始行,終止行d | 刪除指定范圍的行,例如:刪除第 1~3 行,則輸入":1, 3d",會提示"3 fewer lines" |
y | 將指定位置的文本復制到臨時緩沖區。可以使用put操作符訪問這個緩沖區 |
yy | 復制單行,通過在前面加上數字來復制當前光標所在行下的多行 |
P | 將指定緩沖區的內容放到當前光標的位置之上 |
p | 將指定緩沖區的內容放到當前光標的位置之下 |
J | 將兩行進行連接,使其成為一行 |
說明:在使用d刪除時,此時被刪除的內容並沒有真正刪除,都臨時放在了內存中。將光標移動到指定位置處,按下"p"鍵,就可以將剛才刪除的內容又粘貼到此處。在軟件開發中可能需要將連續兩行進行互換,就可以將上面的一行過"dd"鍵刪除,再將光標移動到下面,通過"p"鍵將其重新粘貼,這樣就能夠達到兩行互換位置的目的。
保存退出命令
操作 | 功能描述 |
:wq | 保存文件,退出vi編輯器 |
:w | 保存文件,但不退出vi編輯器 |
:q | 退出vi編輯器 |
:q! | 不保存文件,退出vi編輯器 |
ZZ | 保存文件,退出vi編輯器 |
說明:在對文件沒有寫權限的時候(顯示 readonly)需要在命令后面加!表示強制退出,例如:"w!"或"wq!"就意味着強制保存或強制保存退出,但如果你是文件的所有者或者 root 用戶,就可以強制執行;在保存時,如果要保留源文件,而另存為其他的文件,可以用"w新文件名",如"w /tmp/shadow.vi"。