Vim 是從 Vi 編輯器發展出來的一款極其強大的文本編輯器,它保留了 Vi 編輯器的所有功能,并添加了許多新特性。Vim 具有代碼補全、語法高亮、錯誤跳轉、批量化處理等編輯功能,還支持異常豐富的插件擴展,且整個編輯全程可通過鍵盤完成,無需使用鼠標,以致其成為眾多程序員一款高效的編程開發利器。
本節介紹關于 VIM 的一些命令與快捷方式,關于 VIM 獲取與安裝可以參考最強文本編輯器 VIM 獲取與安裝。VIM 難就難在復雜的操作命令和脫離鼠標的痛苦,其實只要掌握了技巧并不多難。
VIM 模式
- 命令模式(Command mode)
- 輸入模式(Insert mode)
- 視圖模式(Visual mode)
- 末行模式(Last line mode)
模式轉換
命令 | 描述 |
---|
i, I, a, A, o, O, s, S | command 模式 —> insert 模式 |
esc | insert 模式 --> command 模式 |
v, V | command 模式 --> visual 模式 |
esc | visual 模式 --> command 模式 |
:, / | command 模式 —> 末行模式 |
常用命令
注:帶 :
、/
、?
的是在末行命令下使用的命令。
打開文件
命令 | 描述 |
---|
vim filename | 打開或新建文件,并將光標置于第一行的首部 |
vim -r filename | 恢復上次 vim 打開時崩潰的文件 |
vim -R filename | 把文件以只讀方式打開 |
vim + filename | 打開文件,并將光標置于最后一行的首部 |
vim +n filename | 打開文件,并將光標置于第 n 行的首部 |
vim +/str filename | 打幵文件,并將光標置于第一個與 str 匹配的位置 |
vim -c command filename | 在對文件進行編輯前,先執行指定的命令 |
vim file1 file2 file3 … | 打開多個文件 |
vim -On file1 file2 … | 打開多個文件并左右分屏 |
vim -on file1 file2 … | 打開多個文件并上下分屏 |
查看文件
命令 | 描述 |
---|
:ls | 列出當前打開的所有文件 |
:bn | 打開多個文件時,切換顯示下一個文件 |
:bp | 打開多個文件時,切換顯示上一個文件 |
:sp filename | 上下分割,并打開一個新的文件 |
:vsp filename | 左右分割,并打開一個新的文件 |
:next | 切換至下一個文件 |
:prev | 切換至前一個文件 |
:last | 切換至最后一個文件 |
:first | 切換至第一個文件 |
Ctrl + w, s | 按下 ctrl + w,再按下 s,上下分屏打開當前文件 |
Ctrl + w, v | 按下 ctrl + w,再按下 v,左右分屏打開當前文件 |
Ctrl + w, h | 文件左右分屏時,將光標定位到左邊屏幕 |
Ctrl + w, l | 文件左右分屏時,將光標定位到右邊屏幕 |
Ctrl + w, H | 文件左右分屏時,將當前分屏移動到左邊 |
Ctrl + w, L | 文件左右分屏時,將當前分屏移動到右邊 |
Ctrl + w, j | 文件上下分屏時,將光標定位到下邊屏幕 |
Ctrl + w, k | 文件上下分屏時,將光標定位到上邊屏幕 |
Ctrl + w, J | 文件上下分屏時,將當前分屏移動到下邊 |
Ctrl + w, K | 文件上下分屏時,將當前分屏移動到上邊 |
Ctrl + w, c | 文件分屏顯示時,關閉當前分屏 |
Ctrl + w, q | 文件分屏顯示時,關閉當前分屏直到退出 VIM |
操作文件
命令 | 描述 |
---|
:q | 不保存僅退出 |
:q! | 不保存僅退出(強制退出) |
:qa | 全部退出 |
:w | 保存 |
:w! | 強制保存 |
:wq | 保存退出 |
:wq! | 強制保存退出 |
:x | 保存退出 |
:w filename | 另存到 filename 文件 |
:saveas filename | 另存到 filename 文件 |
:e filename | 打開或新建一個文件 |
:e! | 放棄所有更改,恢復文件到上次保存 |
功能命令
命令 | 描述 |
---|
:set nu | 顯示行號 |
:set nonu | 取消顯示行號 |
:set ic | 忽略字符大小寫 |
:set noic | 區分字符大小寫 |
:syntax on | 語法高亮 |
:syntax off | 取消語法高亮 |
:changes | 查看文件變化 |
光標插入
命令 | 描述 |
---|
i | 光標插在當前字符左側 |
I | 光標插在當前行的行首 |
a | 光標插在當前字符右側 |
A | 光標插在當前行的行尾 |
o | 新增下一行,并將光標插在行首 |
O | 新增上一行,并將光標插在行首 |
s | 刪除光標所在字符,并將光標插在此處 |
S | 刪除光標所在行,并將光標插在行首 |
光標移動
命令 | 描述 |
---|
h | 光標向左移動 1 個字符 |
j | 光標向下移動 1 個行 |
k | 光標向上移動 1 個行 |
l | 光標向右移動 1 個字符 |
nj | 光標向下移動 n 個行 |
nk | 光標向上移動 n 個行 |
H | 光標移動到屏幕最上方一行的第 1 個字符 |
M | 光標移動到屏幕中央一行的第 1 個字符 |
L | 光標移動到屏幕最下方一行的第 1 個字符 |
G | 移動到這個文件的最后一行 |
nG | 移動到這個文件的第 n 行 |
gg | 移動到這個文件的第一行,相當于 1G |
n + [enter] | 光標移動向下移動 n 行 |
n + [space] | 光標移動向右移動 n 個字符 |
+ | 光標移動到非空格符的下一行 |
- | 光標移動到非空格符的上一行 |
w | 光標移動到下個單詞首部 |
b | 光標移動到上個單詞首部 |
e | 光標移動到下個單詞尾部 |
ge | 光標移動到上個單詞尾部 |
0 | 光標移動到本行行首 |
$ | 光標移動到本行行尾 |
^ | 移動到行首非空字符位置 |
g_ | 移動到行尾非空字符位置 |
fa | 移動到本行光標處開始向后第一個為 a 的字符處 |
nfa | 移動到本行光標處開始向后第 n 個為 a 的字符處 |
Fa | 移動到本行光標處開始向前第一個為 a 的字符處 |
nFa | 移動到本行光標處開始向前第 n 個為 a 的字符處 |
ta | 移動到本行光標處開始向后第一個為 a 的字符的前一個字符處 |
nta | 移動到本行光標處開始向后第 n 個為 a 的字符的前一個字符處 |
Ta | 移動到本行光標處開始向前第一個為 a 的字符的前一個字符處 |
nTa | 移動到本行光標處開始向前第 n 個為 a 的字符的前一個字符處 |
文件翻頁
命令 | 描述 |
---|
Ctrl + f | 屏幕向下移動一頁 |
Ctrl + b | 屏幕向上移動一頁 |
Ctrl + d | 屏幕向下移動半頁 |
Ctrl + u | 屏幕向上移動半頁 |
zt | 移動屏幕將當前行移動到屏幕上方 |
zz | 移動屏幕將當前行移動到屏幕中間 |
zb | 移動屏幕將當前行移動到屏幕下方 |
大小寫轉換
命令 | 描述 |
---|
~ | 將光標下的字母改變大小寫 |
n~ | 將光標位置開始的 n 個字母改變其大小寫 |
g~~ | 改變當前行字母的大小寫 |
guu | 將當前行的字母全改成小寫 |
gUU | 將當前行的字母全改成大寫 |
guw | 將光標下的單詞改成小寫 |
gUw | 將光標下的單詞改成大寫 |
ngUU | 將從光標開始到下面 n 行字母改成大寫 |
格式化代碼
命令 | 描述 |
---|
== | 將光標所在行代碼格式化縮進 |
n== | 將光標所在行到下面共 n 代碼格式化縮進 |
gg=G | 將全文代碼格式化縮進 |
:set ai | 設定自動縮進 |
:set noai | 取消自動縮進 |
:set expandtab | 將 tab 轉換為 space |
:set tabstop=4 | 制表符寬度 tabstop=4 或 ts=4 |
:retab | 按照設定值重新縮進 |
查找替換
命令 | 描述 |
---|
: s/str/abc/ | 將光標所在行的第一個 str 替換成 abc |
:%s/str/abc/ | 將全文中的第一個 str 替換成 abc |
: s/str/abc/g | 將光標所在行的 str 替換成 abc |
:%s/str/abc/g | 將全文中的 str 替換成 abc |
:m,ns/str/abc/g | 將 m 行到 n 行中所有的 str 替換為 abc |
/str | 向后查找 str n 查找下一個,N 查找前一個 |
?str | 向前查找 str n 查找前一個,N 查找下一個 |
:set hlsearch | 打開高亮搜索結果 |
:set nohlsearch | 關閉高亮搜索顯示 |
復制命令
命令 | 描述 |
---|
yy | 復制光標所在行 |
nyy | 復制光標所在行,到向下 n 行 |
y1G | 復制光標所在行,到第一行的所有數據 |
yG | 復制光標所在行,到最后一行的所有數據 |
y0 | 復制光標所在字符,到該行行首所有數據 |
y^ | 復制光標所在位置,到該行第一個非空字符之間的所有數據 |
y$ | 復制光標所在字符,到該行行尾的所有數據 |
yw | 復制光標所在位置,到該單詞結束 |
粘貼命令
命令 | 描述 |
---|
p | 將復制的數據粘貼到光標的下一行 |
P | 將復制的數據粘貼到光標的上一行 |
np | 粘貼 n 次 |
刪除命令
命令 | 描述 |
---|
dd | 刪除光標所在行 |
ndd | 刪除光標所在行,到向下 n 行 |
d1G | 刪除光標所在行,到第一行的所有數據 |
dG | 刪除光標所在行,到最后一行的所有數據 |
d0 | 刪除光標所在處,到該行行首 |
d^ | 刪除光標所在處,到該行的最前面一個非空字符 |
d$ | 刪除光標所在處,到該行的最后面一個字符 |
dw | 刪除光標所在處,到該單詞結束所有字符 |
dt | 刪除下一個雙引號之前的所有數據 |
x | 向后刪除一個字符 |
nx | 向后刪除 n 個字符 |
X | 向前刪除一個字符 |
ci{ | 刪除{}里面的內容 |
:m,nd | 刪除 m 行到 n 行 |
修改命令
命令 | 描述 |
---|
cw | 修改光標所在處,到該單詞結束所有字符 |
r | 替換光標所在處字符 |
R | 從光標所在處開始替換字符,按 esc 結束 |
其他操作
命令 | 描述 |
---|
. | 重復上次操作 |
u | 撤銷上次操作 |
nu | 撤銷前 n 次操作 |
Ctrl + r | 恢復上次操作 |
J | 將光標所在行與下一行的數據結合成同一行 |
Ctrl + v | 可視化塊 |
Shift + v | 可視化行 |
互動板塊
- 問:如何快捷入門 VIM?
- 答:多敲多練,把鍵盤敲爛!