Vim官網(wǎng):*
http://www.vim.org/
Vim文檔:
Vim簡介
-
Vim(Vi[Improved])編輯器是功能強大的跨平臺文本文件編輯工具,繼承自Unix系統(tǒng)的Vi編輯器,支持Linux/Mac OS X/Windows系統(tǒng),利用它可以建立、修改文本文件
-
Vim是從 vi發(fā)展出來的一個文本編輯器。代碼補全、編譯及錯誤跳轉(zhuǎn)等方便編程的功能特別豐富,和Emacs并列成為類Unix系統(tǒng)用戶最喜歡的文本編輯器。
-
vim的設(shè)計理念是命令的組合
Vim的6種基本模式
-
普通模式
使用vim打開一個文件時默認模式。在普通模式中,用的編輯器命令,比如移動光標,刪除文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數(shù)編輯器默認模式為插入模式)
-
插入模式
也可以叫做編輯模式,在普通模式下敲擊i、a 或 o 就進入插入模式,允許用戶通過鍵盤輸入、編輯。在這個模式中,大多數(shù)按鍵都會向文本緩沖中插入文本。大多數(shù)新用戶希望文本編輯器編輯過程中一只保持這個模式。在插入模式中,可以按ESC鍵回到普通模式
-
可視模式
在普通模式下敲擊前盤上的v鍵,就進入可視化模式,然后移動光標就可以選中一塊文本,常用來完成文本的賦值、粘貼、刪除等操作。這個模式與普通模式比較相似。但是移動命令會擴大高亮的文本區(qū)域。高亮區(qū)域可以是字符、行或者是一塊文本。當執(zhí)行一個非移動命令時,命令會被執(zhí)行到這塊高亮的區(qū)域上。Vim的“文本對象”也能和移動命令一樣用在這個模式中
-
選擇模式
這個模式和無模式編輯器的行為比較相似(Windows標準文本控制的方式)。這個模式中,可以用鼠標或者光標鍵高亮選擇文本,不過輸入任何字符的話,Vim會用這個字符替換選擇的高亮文本塊,并且自動進入插入模式
-
命令行模式
在命令行模式可以輸入會被解釋成并執(zhí)行的文本。在執(zhí)行命令后,Vim返回到命令模式之前的模式,通常是普通模式
-
Ex模式
這和命令行模式比較相似,在使用:visual命令離開Ex模式前,可以一次執(zhí)行多條命令。
這6中模式我們常用到就是普通模式、插入模式 和 命令行模式
Vim鍵盤圖
模式的切換
在剛進入Vim時,便進入了普通模式,在普通模式中可以按i(插入)或者a(附加)進入插入模式,在普通模式中按:進入命令行模式;在命令行模式中和插入模式中按ESC返回到普通模式。如圖:
常用命令及說明
| 命令 |
說明 |
h |
向 左 移動 |
l(小寫字母L) |
向 右 移動 |
j |
向 下 移動 |
k |
向 上 移動 |
xh |
向 左 移動x個字符距離 |
| 命令 |
說明 |
w |
將光標移動到下一個單詞的開頭 |
b |
將光標移動到前一個單詞的開頭 |
e |
將光標移動到下一個單詞的詞末 |
E |
移動到單詞的結(jié)尾(忽略標點符號) |
ge |
將光標移動到上一個單詞的詞末 |
2w |
指定移動的次數(shù) |
| 命令 |
說明 |
$ |
將光標移動到當前行的行尾 |
0 |
將光標移動到當前行的行首 |
^ |
將光標移動到當前行的第一個非空字符(行首和當前行非空字符不是一個位置) |
2| |
移到當前行的第2列 |
fx |
將光標移動到當前行的第一個字符x上 |
3fx |
將光標移動到航前行的第3個字符x上 |
tx |
將光標移動到目標字符x的前一個字符上 |
% |
用于符號間的移動,它會在一對()、[]、{}之間跳躍 |
fx 和 tx 可以通過 ; 和 , 進行重復(fù)移動,一個是正向重復(fù),一個是反向重復(fù)
| 命令 |
說明 |
( |
移到當前句子的開頭 |
) |
移到下一個句子的開頭 |
{ |
移到當前一段的開頭 |
} |
移到下一段的開頭 |
[[ |
移到當前這一節(jié)的開頭 |
]] |
移到下一節(jié)的開頭 |
| 命令 |
說明 |
xG |
跳轉(zhuǎn)到指定的第x行,G移動到文件按末尾 |
| ``(2次單引號) |
返回到跳轉(zhuǎn)前的位置 |
gg |
移動到文件開頭 |
x% |
移動到文件中間,就使用50% |
H |
移動到home |
M |
移動到屏幕中間 |
L |
移動到一屏末尾 |
ctrl+G |
查看當前的位置狀態(tài) |
| 命令 |
說明 |
ctrl+u/ctrl+d
|
半屏滾動 |
ctrl+f/ctrl+b
|
全屏滾動 |
| 命令 |
說明 |
zz |
將光標置于屏幕的中間 |
zt |
將光標移動到屏幕的頂部 |
zb |
將光標移動到屏幕的底部 |
| 命令 |
說明 |
mx , my , mz
|
設(shè)置三個位置 |
x , y , z
|
跳轉(zhuǎn)到設(shè)置 |
| 命令 |
說明 |
i |
在當前光標的前面插入字符 |
a |
在當前光標的后面追加字符 |
o |
在當前光標的下一行行首插入字符 |
I(大寫字母i) |
在一行的開頭添加文本 |
A |
在一行的結(jié)尾處添加文本 |
O |
在光標當前行的上一行插入文本 |
s |
刪除當前光標處的字符并進入到插入模式 |
S |
刪除光標所在處的行,并進入到插入模式 |
u |
撤銷修改 |
| 命令 |
說明 |
x |
刪除當前光標所在處的字符 |
3x |
刪除3個連續(xù)字符,以此類推 |
X |
刪除當前光標左邊的字符 |
Delete |
同 x
|
dw |
刪除一個單詞(從光標處到空格) |
daw |
無論光標在什么位置,刪除光標所在的整個單詞(包括空白字符) |
diw |
刪除整個單詞文本,但是保留空格字符不刪除 |
d2w |
刪除從當前光標開始處的2個單詞 |
d$或 D
|
刪除從光標到一行末尾的整個文本 |
d0(字母d和數(shù)字0) |
刪除從光標到一行開頭的所有單詞 |
dl(字母d和小寫字母L) |
刪除當前光標處的字符(等同于x) |
dh |
刪除當前光標左邊的字符(等同于X) |
dd |
刪除當前光標處的一整行(等同于D) |
5dd |
刪除從光標開始處的5行代碼 |
d^ |
刪除至行首 |
dgg |
刪除從光標到文本開頭 |
dG |
刪除從光標到文本結(jié)尾 |
d1G |
刪除至文檔首部 |
J |
刪除一個分行符,將當前行與下一行合并 |
| 命令 |
說明 |
y |
復(fù)制 |
y0(數(shù)字0) |
復(fù)制從當前光標到行首的所有單詞 |
yy |
復(fù)制一整行 |
3yy |
復(fù)制從當前光標所在行開始的3行 |
y^ |
復(fù)制至行首,不含光標所在處字符 |
y$ |
復(fù)制從當前光標到行結(jié)尾的所有單詞 |
yw |
復(fù)制一個單詞 |
y2w |
復(fù)制2個單詞 |
yG |
復(fù)制至文本末 |
y1G |
復(fù)制至文本開頭 |
p |
粘貼到光標后 |
P |
粘貼到光標前 |
ddp |
剪切并粘貼 |
復(fù)制文本塊
1.首先進入visual(可視)模式:v
2.移動光標選擇文本
3.復(fù)制與粘貼的操作
| 命令 |
說明 |
cw |
刪除從光標處到單詞結(jié)尾的文本并進入到插入模式 |
cb |
刪除從光標處到單詞開頭的文本并進入到插入模式 |
cc |
刪除一整行并進入到插入模式 |
~ |
修改光標下字符的大小寫 |
r |
替換當前光標下的字符 |
R |
進入到替換模式,連續(xù)替換,直到按下Esc |
xp |
交換光標和下一個字符 |
r+<待替換字母> |
將游標所在字母替換為指定字母 |
C(大寫) |
替換游標以后至行末 |
| 命令 |
說明 |
/string |
正向查找 |
?string |
反向查找 |
f<字母> |
向后搜索<字母>并跳轉(zhuǎn)到第一個匹配的位置 |
F<字母> |
向前搜索<字母>并跳轉(zhuǎn)到第一個匹配的位置 |
t<字母> |
向后搜索<字母>并跳轉(zhuǎn)到第一個匹配位置之前的字母 |
T<字母> |
向前搜索<字母>并跳轉(zhuǎn)到第一個匹配位置之后的字母 |
:s/old/new |
將當前行的第一個字符串old替換為new
|
:s/old/new/g |
將當前行的所有字符串old替換為new
|
:90s/old/new/g(90指定的行數(shù)) |
將指定行的所有字符串old替換為new
|
:90,93s/old/new/g(90,93指定的行數(shù)) |
將指定范圍的行的所有字符串old替換為new
|
:%s/old/new/g |
將文本中所有的字符串old替換為new
|
:%s/old/new/gc |
依次替換每個字符串關(guān)鍵字 |
:%s/^struct/int/g |
將所有以struct開頭的字符串替換為int
|
設(shè)置高亮顯示
:set hls
*按鍵將當前光標處的單詞高亮顯示,使用n瀏覽下一個查找高亮的結(jié)果
| 命令 |
說明 |
u |
撤銷上一步的操作 |
Ctrl+r |
將原來的插銷重做一遍 |
U |
恢復(fù)一整行原來的面貌(文件打開時的文本狀態(tài)) |
:q |
若文件沒有修改,直接退出 |
:q! |
文件已經(jīng)被修改,放棄修改退出,不保存 |
:wq |
文件已經(jīng)被修改,保存修改并退出 |
:wq! |
強制保存并退出 |
:w文件路徑 |
另存為 |
:saveas 文件路徑 |
另存為 |
:x |
保存并退出 |
shift+zz |
退出vim
|
| 命令 |
說明 |
>> |
整行向右縮進 |
<< |
整行向左回退 |
/+<需要查找的字符串>+回車 |
向下查找(進入查找之后,輸入n和N可以繼續(xù)查找,n是查找下一個內(nèi)容,N查找上一個內(nèi)容,命令行模式下輸入noh回車可取消搜索) |
?+<需要查找的字符串>+回車 |
向上查找(進入查找之后,輸入n和N可以繼續(xù)查找,n是查找下一個內(nèi)容,N查找上一個內(nèi)容,命令行模式下輸入noh回車可取消搜索) |
\* |
尋找游標所在處的單詞 |
:set nu |
顯示行號 |
:set shiftwidth=10 |
設(shè)置縮進為10個字符,以此類推(輸入Esc回到普通模式,再次嘗試>>看縮進是否變化) |
:ce(center) |
本行內(nèi)容居中 |
:ri(right) |
本行內(nèi)容居右 |
:le(left) |
本行內(nèi)容居左 |
:== |
當前行自動縮進 |
:n== |
(n是自然數(shù))表示自動縮進從當前行起的下面n行 |
| 命令 |
說明 |
:buffers |
查看緩沖區(qū)列表(等同于(小寫字母L)ls) |
:buffer N |
根據(jù)緩沖區(qū)列表的編號跳轉(zhuǎn)到指定緩沖區(qū) |
:bnext/bprev |
遍歷緩沖區(qū)列表 |
:bfirst/blast |
分別調(diào)到緩沖區(qū)列表的開頭和結(jié)尾 |
:write |
將緩沖區(qū)的修改保存到磁盤上 |
:edit! e! |
放棄緩沖區(qū)的修改,恢復(fù)到文件打開時的狀態(tài) |
:edit file |
編輯另一個文件 |
:wnext |
保存當前緩沖區(qū)的修改并跳轉(zhuǎn)到緩沖區(qū)列表中的下一個文件 |
| 命令 |
說明 |
tabedit file / tab split
|
標簽頁的新建 |
tabn / tabp
|
標簽頁的切換 |
gt / gT
|
按鍵 |
tabclose |
標簽頁的關(guān)閉 |
tabonly |
關(guān)閉當前的標簽頁 |
zf200G |
將光標和200行之間的代碼折疊起來 |
za |
打開和關(guān)閉折疊 |
zr / zm
|
一層一層地打開和關(guān)閉折疊 |
zR / zM
|
分別打開和關(guān)閉所有的折疊 |
zj |
跳轉(zhuǎn)到下一個折疊處 |
zk |
跳轉(zhuǎn)到上一個折疊處 |
zd |
刪除光標下的折疊 |
zD |
刪除光標下的折疊以及嵌套的折疊 |
zE |
刪除所有的折疊標簽 |
創(chuàng)建的折疊當退出vim之后就失效了
| 命令 |
說明 |
split / vsplit fileName
|
分割窗口 |
ctrl+w hjkl ctrl+w w
|
窗口間跳轉(zhuǎn) |
ctrl+w HJKL |
移動窗口 |
ctrl+w +/- |
調(diào)整窗口的高度 |
ctrl+w </> |
調(diào)整窗口的寬度 |
ctrl+w = |
所有的窗口設(shè)置相同的尺寸 |
close |
關(guān)閉一個窗口 |
qall |
退出所有窗口 |
qall! |
放棄修改,退出所有窗口 |
wqall |
保存并退出所有窗口 |
wall |
保存所有窗口 |
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。