這是當時初學VIM后做的一個思維導圖,圖片稍大,所以從freemind導出了html文本po在下面;圖片在最下方,放大可清晰瀏覽。
VIM
- 普通模式
- 普通編輯命令
-
功能:瀏覽,普通編輯
x:刪除光標所在字符 (=d+h)
X:刪除光標前一個字符 (=d+l)
D:刪除當前行光標位置到行尾的字符 (=d+$)
dd:刪除光標所在的行
J:刪除光標所在行的換行符
p:在光標后粘貼
P:在光標前粘貼,粘貼行時,p是粘貼在光標的下方,P粘貼在光標上方
xp:交換兩個字符的位置
ddp:交換兩行的位置
u:撤銷前一個操作
Ctrl+r:恢復前一個操作,可以配合數字n進行n次批量操作;如3x,則刪除當前光標及其后兩個字符。
注1:刪除命令執行后,刪除的內容保存在緩沖區。
注2:粘貼命令調用緩沖區內最近的內容。
-
- 控制命令
- 字符級命令
- h或鍵盤向左鍵:光標左移一個字符
- l或鍵盤向右鍵:光標右移一個字符
- j或鍵盤向下鍵:光標下移一行
- k或鍵盤向上鍵:光標上移一行
- 可以配合數字n進行n次批量操作
- 單詞級命令
-
w:下一個單詞的詞首
W:空白字符分割的下詞詞首
b:上一個單詞的詞首
B:空白字符分割的上詞詞首
e:下一個單詞的詞末
E:空白字符分割的下詞詞末
ge:上一個單詞的詞末
GE:空白字符分割的上詞詞末
注3:光標在單詞內時,b/e命令的結果是移動到本單詞的詞首/詞末
注4:命令前+數字n,執行n次命令
-
- 行級命令
- $:當前行行尾
- 0(數字0):當前行的第一個字符
- ^:當前行的第一個非空字符
- 移動到指定字符
- f+單個字符:在本行內向右移動到指定字符
- F+單個字符:在本行內向左移動到指定字符
- t+單個字符:在本行內向右移動到指定字符的前一個字符
- T+單個字符:在本行內向左移動到指定字符的前一個字符
- 同樣可以在命令前加數字n來定義移動到行唄第幾個指定字符
- 使用“;”來查找下一個,“,”來查找上一個
- %:在“( )”、“[ ]”、“{ }”類符號的首尾間切換
- 1G或gg:文本第一行行首
- nG:移動到第n行行首
- n%:按百分比近似定位到某行
- G:文本末行行首
- 屏幕級命令
- H:屏幕頂部行首
- M:屏幕中央行首
- L:屏幕底部行首
- zt:使光標所在位置移動到屏幕的頂部(所有內容做位移)
- zz:使光標所在位置移動到屏幕的中央(所有內容做位移)
- zb:使光標所在位置移動到屏幕的頂部(所有內容做位移)
- ctrl+b:上移一屏
- ctrl+f:下移一屏
- ctrl+u:上移半屏
- ctrl+d:下移半屏
- ctrl+e:上滾一行
- ctrl+y:下滾一行
- 提示信息
-
Ctrl+g:顯示當前行的位置信息(第幾行,相對整個文本行數的百分比)(當次生效)
-
- 保存並退出VIM:ZZ
- 字符級命令
- 替換命令
-
r:替換當前字符
R:(進入replace模式)持續替換光標所在字符,直到使用ESC退出替換模式。
-
- 標記mark
- m+[a~z] :在當前光標做標記,如ma
- `+(mark):光標返回指定標記,如`a,則光標返回標記a的位置
- ‘+(mark):光標返回指定標記所在的行,如’a,則光標返回到標記a所在行首
- ‘:回到跳轉前的位置
- “:跳轉到最后編輯的位置
- 【:最后修改的開始位置
- 】:最后修改的結束位置
- 一些特定的標記可以跳轉到其他文本,具體情況以后再做了解
- 普通編輯命令
- “.”命令:重復上一次操作
-
例:
1:/word1 \\查找單詞word1
2:cw word2 \\把word1修改為word2
3:n \\下一個匹配點
4:. \\重復步驟2
“.”命令重復的對象:
普通編輯命令(普通模式下的命令),組合命令(操作符+動作);
不能重復命令行下的命令。
-
- 多線操作
-
vim file1 file2 file3...:
可在文本間切換編輯。
:n:進入下一文本
:N:進入上一文本
-
- 命令行模式
- 設置命令“:”
-
保存、退出
-
:+w :保存文本,不退出vim
:+wq:保存並退出vim(不管有否修改,文件修改時間都會更新)
:+x:若有修改,則保存並退出vim,若無修改,則直接退出vim
:+q :未對文本進行修改時,可使用該命令直接退出vim
:+q!:強制退出vim(放棄修改)
:+e!:放棄修改並重新打開該文本
環境設定
-
:+set nu[mber]:顯示行號
:+set nonu[mber]:隱藏行號
:+set ruler:顯示光標位置信息
:+set noruler:隱藏光標位置信息
:+set hlsearch:高亮匹配
:+set nohlsearch:取消高亮匹配
:+nohlsearch:臨時取消高亮(只取消一次查詢的高亮)
:+set ic或ignorecase):忽略大小寫
:+set noic(或noignorecase):區分大小寫
當前命令忽略大小寫:查找命令+\c,如:/test\c,查找test,忽略大小寫
:+set incsearch:在輸入字符串過程中顯示匹配點
:+set nowrapscan:找到文尾后停止查找
:+set wrapscan:恢復為到文尾后自動從頭開始
替換(查找然后替換)
-
:s/old/new/ :當前行的第一個old替換為new(old和new可以是字符也可以是字符串)
:x,ys/old/new/g:x行到y行的所有old替換為new(注意末尾的參數g,不加參數g則只替換每行的第一個old)
參數“x”替換為“.”,則從當前行開始
參數“y”替換為“$”,則到最后一行為止
:%s/old/new/gc:全局替換,替換文本中所有old為new(注意最后的參數“c”,即為每次替換均需要確認)
:+e filename:vim下打開指定文本
:+!command:vim下執行某shell命令
:marks:查看已有的標記
:delmarks 標記名:刪除某標記
-
-
- 查找命令
-
/+字符或字符串:在文本內從光標位置向下查找指定字符/字符串
?+字符或字符串:反向查找
查找命令執行后,可使用:
n:查找下一個
N:查找上一個
(對於?查找,移動方向也相應變化)
n/N命令前也可以使用數字n來查第n個
-
- 退回普通模式:ESC
- 設置命令“:”
- 可視模式
-
可視模式的功能是選擇區域,選擇區域后的其他操作參見其他模式!!
v:字符選擇,可進行字符的逐個選擇;
選中從進入可視模式時的光標位置到當前光標位置的內容,光標控制可以參見普通模式的控制命令以提高效率。
V:按行選擇,參照字符選擇。
Ctrl+v:列塊選擇
-
選擇屏幕的一個矩形區域;以進入可視模式時的光標位置為一角,以光標當前位置為對角。光標控制可以參見普通模式的控制命令以提高效率。
o:把光標移動到矩形的對角
O:把光標移動到水平位置的另一角
-
-
- insert模式
-
i:在光標前插入字符
I:在行首插入字符
a:在光標后插入字符
A:在行尾插入字符
o:在光標下發插入空行
O:在光標上方插入空行
s:刪除光標位置字符,並進入insert模式 (=c+l)
S:刪除光標所在行,並進入insert模式 (=c+c)
C:刪除光標位置到行尾的字符,並進入insert模式 (=c+$)
-
退回普通模式:ESC
-
- 操作符
-
三種操作符
-
d:delete 把選擇的內容存入寄存器。
c:change 把選擇的內容存入寄存器,使用新的內容覆蓋原內容。
y:copy 把選中的內容拷貝到寄存器中。
-
yw:拷貝一個單詞
ynw:拷貝n個單詞
ye: 拷貝一個單詞,不包括單詞結尾空格。
yne:拷貝n個單詞。
yy:拷貝一行
nyy:浮躁從光標所在行起的n行,注意n在最前面。
y$:拷貝從當前位置到行尾
yG:拷貝從當前位置到文尾
三種操作符存入寄存器的內容都適用於p/P粘貼命令。
三種操作符與普通命令組合的思想一致!!!
-
-
- 操作符+動作
-
動作:普通模式下的控制命令;動作前有操作符時,動作的作用是覆蓋一段文本;動作所走過的軌跡即操作符將要操作的對象。
如:d+w,結果是刪除光標位置(含)到下以單詞首(不含)直接的字符。
-
- 可視模式+操作符
- 在可視模式下選擇要操作的區域,然后使用操作符進行操作
- 操作符+文本對象
-
daw:刪除一個單詞,包含單詞的邊界(空格)。
da【:刪除[ ]整個塊,包含符號本身;
da<;da(;da{;da";da'同理
diw:刪除一個單詞,不含單詞的邊界。
di【:刪除[ ]內的字符,不含符號本身;
di<;di(;di{;di";di'同理
常見文本對象:
ap 一個段落; aW 一個字符串;as 一個句子; at 一個HTML標簽
-
-