Vim 是從 vi 發展出來的一個文本編輯器。其代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程序員中被廣泛使用。和 Emacs 並列成爲類 Unix 系統用戶最喜歡的編輯器。
vi 簡介
vi 是 Unix 和 Linux 操作系統使用的終端文本編輯器,任何一臺安裝了 Unix 或 Linux 的機器都會提供這套軟件,它是系統管理員手中的得力工具。vim 是 vi 的升級版,它不僅兼容 vi 的所有指令(命令),而且還具有一些新特性。
vi 的操作模式
vi 有三種操作狀態:
- 命令模式(command mode)
- 插入模式(insert mode)
- 末行模式(last line mode)
它們的功能如下:
(1) 命令模式:當執行 vi 後,首先會進入命令模式(指令模式),此時輸入的任何字符都被視爲命令。命令模式用於控制屏幕光標的移動,文本的刪除,移動複製某區段,進入插入模式下,或者進入末行模式。
(2) 插入模式:在命令模式下輸入相應的插入命令進入該模式。只有在插入模式下,纔可做文字數據輸入和其它編輯操作,按 ESC 鍵可回到命令模式。
(3) 末行模式:在命令模式輸入某些特殊字符,如 “/”、"?" 和 “:”,可進入末行模式。在該模式下可存儲文件或離開編輯器,也可以設置編輯環境,如尋找字符串、列出行號等。
vi 三種工作模式的轉換如圖:
vi 的進入與退出
進入 vi
若要編輯文件 myfile,執行如下執行即可:
$vi myfile
終端顯示 vi 的編輯窗口,進入命令模式。也可以直接輸入 vi 創建一個新文件,然後在退出時保存文件或者丟棄。
退出 vi
如果在插入模式下,則先利用 ESC 鍵返回命令模式,然後可選用下列指令退出 vi。
:q!
離開 vi,並放棄剛纔的修改。:wq
保存退出。:ZZ
保存退出。:x
同:wq
:w
保存但不退出。:q
退出 vi,若文件被修改過,則會被要求確認是否放棄修改。此指令可以 w 配合使用。
注意:如果不知道當前處於何種模式,可以多按幾次 ESC 鍵,以便確認進入命令模式。
vi/vim 常用命令
命令模式的常用命令
在命令模式下可以進行文本的編輯工作。使用下列命令,配合一般鍵盤上的功能鍵,如方向鍵、Insert 鍵、Delete 鍵等,就可以利用 vi 來處理文本數據了。
光標的移動
命令 | 說明 | 功能鍵 |
---|---|---|
h |
向左移一個字符 | |
l |
向右移一個字符 | |
j |
向上移一個字符 | |
k |
向下移一個字符 | |
0 |
移至該行之首 | Home |
$ |
移至該行之末 | End |
^ |
移至該行的第一個非空白字符處 | |
H |
移至窗口的第一行 | |
M |
移至窗口的中間那行 | |
L |
移至窗口的最後一行 | |
G |
移至該文件的最後一行 | |
nG |
移至該文件的第 n 行 | |
gg |
移至該文件的第一行 | |
w |
跳到下一個單詞 | |
b |
跳到上一個單詞 | |
{ |
按段移動,上移 | |
} |
按段移動,下移 |
翻屏與滾屏
命令 | 說明 | 功能鍵 |
---|---|---|
Ctrl+f |
向後翻一屏 | PageDown |
Ctrl+b |
向前翻一屏 | PageUp |
Ctrl+d |
向後翻半屏 | |
Ctrl+u |
向前翻半屏 | |
zt |
光標所在行移動到窗口頂端 | |
zz |
光標所在行移動到窗口中間 | |
zb |
光標所在行移動到窗口底部 |
刪除(剪切)與修改
命令 | 說明 | 功能鍵 |
---|---|---|
x |
刪除光標所在的字符 | Delete |
X |
刪除光標的前一個字符 | |
dd |
刪除光標所在的行 | |
ndd |
刪除包括光標所在行的 n 行文本 | |
d0 |
刪除從光標前一個字符開始一直到行首的文本 | |
dw |
刪除從光標開始的一個單詞 | |
D |
刪除從光標開始一直到行末的文本 | |
s |
刪除光標所在字符並進入插入模式 | |
S |
刪除光標所在行並進入插入模式 | |
r |
替換光標所在字符 | |
R |
進入替換狀態,替換光標所在字符及以後的字符,按 ESC 退出替換狀態 |
複製粘貼
命令 | 說明 |
---|---|
yy 或 Y |
複製光標所在行 |
nyy 或 nY |
複製包括光標所在行開始的 n 行 |
p (小寫) |
粘貼到光標的下一行 |
P (大寫) |
粘貼到光標的上一行 |
撤銷與反撤銷
命令 | 說明 |
---|---|
u |
撤銷 |
Ctrl+r |
反撤銷 |
可視模式
命令 | 說明 |
---|---|
v |
選中文本(按字符移動) |
V |
選中文本(按行移動) |
可視模式可以配合 d
,y
實現對文本塊的刪除(剪切),複製。
vim 下還支持配合 <
,>
實現對文本塊的左右移動,首先使用 v
或 V
選擇要移動的部分,然後按 Ctrl+v
選中該文本塊,接着可根據需要左移 <
或 右移 >
。
文本行移動(縮進)
命令 | 說明 |
---|---|
>> |
向右移動(縮進) |
<< |
向左移動(縮進) |
> (vim 支持) |
向右移動(縮進) |
< (vim 支持) |
向左移動(縮進) |
重複命令
命令 | 說明 |
---|---|
. |
重複執行上一次的命令 |
退出命令
命令 | 說明 |
---|---|
ZZ |
退出保存,相當於末行模式下的 :wq |
插入模式
所有以下命令都能從命令模式進入插入模式。
命令 | 說明 |
---|---|
i |
從光標所在字符前面開始插入字符 |
I |
從光標所在行的行首開始插入字符 |
a |
從光標所在字符後面開始插入字符 |
A |
從光標所在行的行末開始插入字符 |
o |
光標所在行向下新增一行 |
O |
光標所在行向上新增一行 |
末行模式
查找命令
命令 | 說明 |
---|---|
/exp |
往前查找字符串 exp,n 下一個,N 上一個 |
?exp |
往後查找字符串 exp,n 下一個,N 上一個 |
替換命令
命令 | 說明 |
---|---|
:%s/abc/123/g |
將當前文件中所有的 abc 替換成 123 |
:1,10s/abc/123/g |
將 1 到 10 行的 abc 全部替換成 123 |
退出命令
命令 | 說明 |
---|---|
:q |
退出程序 |
:q! |
強制退出,不保存修改 |
:w |
保存修改 |
:w filename |
將編輯內容存爲名爲 filename 的文件 |
:wq |
保存退出 |
:x |
若有修改保存,退出程序 |
:wq
強制性 寫入文件並退出。即使文件沒有被修改也強制寫入,並更新文件的修改時間。
:x
寫入文件並退出。僅當文件被修改時才寫入,並更新文件修改時間,否則不會更新文件修改時間。
其它命令
命令 | 說明 |
---|---|
:set nu |
顯示行號 |
:set nonu |
不顯示行號 |
:set ff |
查看文件格式 |
:set ff=unix |
修改文件格式爲 unix |
:noh |
取消搜索結果高亮 |