l 模式切換vim
在插入模式或命令行模式中按「ESC」或者「Ctrl+[」便可進入普通模式,在普通模式中輸入「i」或者「a」便可進入插入模式,輸入「:」進入命令行模式。函數
l 打開文件ui
命令行模式中輸入": 文件路徑+文件名"可打開文件。spa
l 文檔編輯命令行
文檔編輯是vim最主要的功能,分幾個點來說述。blog
在普通模式下,移動光標ci
按鍵文檔 |
說明字符串 |
hit |
左 |
L |
右 |
J |
下 |
K |
上 |
w |
移動到下一個單詞 |
b |
移動到上一個單詞 |
3w |
移動到光標後第三個單詞的首字母 |
e |
將光標移動到下一個單詞的最後一個字符 |
ge |
將光標移動到前一個單詞最後一個字符 |
(n)$ |
將光標移動到當前行(後第n行)行尾 |
^ |
將光標移動到當前行第一個非空白字符上 |
0 |
將光標移動到當前行的首字符上 |
G |
將光標移動到最後一行,(計數n)G移動到第n行 |
gg |
移動到第一行 |
:set number |
顯示行號 |
:set nonumber |
關閉行號 |
:set ruler |
在vim窗口右下角顯示當前光標位置 |
`` |
當使用G命令從一個地方跳轉到另外一個地方時,vim會記得起跳的位置,使用``能夠在兩個位置間跳轉。鍵盤上``與「~」在同一個按鍵上。 |
CTRL-O |
vim可以記憶光標位置,該命令能夠跳轉到以前的光標位置,而CTRL-I是跳轉到時間靠後的光標位置。 |
具名標記 |
「ma」命令會將當前光標下的位置標記爲"a","`a"命令能夠將光標跳轉到標記爲a的位置所在行行首,「:marks」用來查看標記的列表,「:delm!」將刪除全部標記。 |
CTRL-U |
顯示文本的窗口向上滾動半屏 |
CTRL-D |
向下滾動半屏 |
CTRL-E |
向上滾動一行 |
CTRL-Y |
向下滾動一行 |
CTRL-F |
向上滾動一整屏 |
CTRL-B |
向下滾動一整屏 |
zz |
將當前行置爲屏幕正中央 |
zt |
將當前行置爲屏幕頂端 |
zb |
將當前行置爲屏幕底端 |
按如下按鍵將從普通模式進入插入模式,並可從相應位置開始輸入。
命令 |
說明 |
i |
在當前光標出進行編輯 |
I |
在行首插入 |
A |
在行末插入 |
a |
在光標後插入 |
|
在當前行後插入一個新行 |
O |
在當前行前插入一個新行 |
S或cc |
改變整行 |
C或c$ |
改變當前光標到行尾的內容 |
s或cl |
修改一個字符 |
在virtual模式下被選中的文本會高亮顯示,能夠對選中的文本進行復制粘貼及刪除等操做。
命令 |
說明 |
v |
進入可視模式,從光標位置開始,光標所通過的地方被選中,再按一次v結束 |
V |
從當前行開始,光標所通過的行都會被選中,再按一次V結束 |
Ctrl+v |
從光標當前位置開始,選中光標起點和終點所構成的矩形區域,再按一次Ctrl+v結束 |
ggVG |
選中所有文本,gg跳到首行,V選中當前行(首行),G跳到末尾 |
ve |
選中一個單詞 |
命令 |
說明 |
y(n)w |
複製n個字符到寄存器 |
yy或者Y |
複製整行 |
y$ |
複製當前光標至行尾的文本 |
p |
粘貼(從寄存器取出) |
"+y |
複製到系統剪貼板,即vim的+寄存器 |
"+p |
從系統剪貼板粘貼 |
nyy |
n表示大於1的數字,複製n行 |
yw |
從光標處複製至一個單子/單詞的末尾,包括空格 |
ye |
從光標處複製至一個單子/單詞的末尾,不包括空格 |
y$ |
從當前光標複製到行末 |
y0 |
從當前光標位置(不包括光標位置)複製之行首 |
y3l |
從光標位置(包括光標位置)向右複製3個字符 |
y5G |
將當前行(包括當前行)至第5行(不包括它)複製 |
y3B |
從當前光標位置(不包括光標位置)反向複製3個單詞 |
命令 |
說明 |
x或diw |
刪除一個字符 |
X |
刪除當前光標以前的字符 |
dd |
刪除整行,下面的行會自動移上來,刪除的內容保留在剪切板中能夠粘貼到其餘地方,其餘刪除同 |
J |
刪除換行符,即兩行會合成一行 |
D |
刪除當前光標至行尾的內容 |
dw |
刪除自當前光標至下一個word的開頭 |
dG |
刪除當前行至文件尾的內容 |
dgg |
刪除當前行至文件頭的內容 |
dw |
刪除光標以後的單詞剩餘部分 |
d$ |
刪除光標以後的該行剩餘部分 |
文件內搜索字符串
命令 |
說明 |
/字符串 |
往光標以後尋找該字符串 |
?字符串 |
往光標以前尋找該字符串 |
(計數x)n |
往下繼續尋找一個(第x個)相同的字符串 |
(計數x)N |
往上繼續尋找一個(第x個)相同的字符串 |
:set ignorecase或:set ic |
匹配的結果忽略大小寫 |
:set noignorecase或:set noic |
精確匹配大小寫的結果 |
:set hlsearch |
高亮顯示搜索結果,:set nohlsearch可關閉這一功能 |
* |
將光標所在的字符做爲目標字符往下查找,前面可加計數n,表明查找第三個匹配到的結果,"#"與"*"相同,只是往上查找 |
目錄下搜索字符串
一些場合,能夠用cscope find t能夠解決了。但是遇到複雜的模式,該命令就捉襟見肘了。這時候就得用vim自帶的匹配利器---vimgrep。
vimgrep有兩種使用的方式:
1)將匹配模式放到//之間:這樣狀況下,使用vim的正則模式來進行匹配
命令格式::vim[grep][!] /{pattern}/[g][j] {file}
例子:
:vim /function demo/ *.c 在當前目錄的.c文件中,搜索function demo
:vim /function demo/ **/*.c 在任意目錄的.c文件中,搜索function demo
:vim /function demo/ **/*.{h,c} 在任意目錄的.c和.h文件中,搜索function demo
:vim /\cfunction demo/ **/*.c 使用\c,不區分大小寫
:vim /\Cfunction demo/ **/*.c 使用\C,區分大小寫
:vim /function demo/j *.c 只更新quickfix,不跳轉到第一個搜索結果
:vim /function demo/g *.c 一行中如有多個匹配,每一個都要單獨顯示一行
2)直接加匹配模式:這種狀況下只能搜索ID,舉個例子,就不詳細說了
:vimgrep Error *.c
vimgrep能夠跟split或vsplit結合使用,將結果顯示到單獨的窗口中:
vsp | vimgrep demo *.c
lvimgrep跟vimgrep功能上是同樣的,但該命令更新提本地的窗口列表,而不是quickfix列表
若結果更新到quickfix:
用cw查看,cn下一條,cp上一條,ccl關閉結果,colder上次搜索結果,cnewer下次搜索結果。
若結果更新到本地的窗口列表:
用lopen查看,lcl關閉,lnext下一條,lpre上一條,lolder上次搜索結果,lnewer下次搜索結果。
經常使用vim文本匹配表達式
匹配符 |
說明 |
\> |
表示一個單詞結尾處,好比/the\>,表示查找以the結尾的字符串 |
\< |
表示一個單詞結尾處,好比/\<the,表示查找以the開始的字符串,那麼/\<the\>,表示查找以the做爲完整單詞的字符串 |
^ |
匹配一行的開頭,/^the,表示只匹配一行開始處的the |
% |
匹配一行的結尾,/the$,表示只匹配一行結尾處的the |
. |
匹配任何單字符,好比/c.m,能夠匹配到com,cim,cam等 |
\ |
匹配特殊字符,好比查找中文句號「。」就寫成/\。 |
|
|
替換文本
命令 |
說明 |
:1,$s/舊文本/新文本/g |
將文件中全部匹配到的就文本替換爲新文本 |
:10,20s/舊文本/新文本/ |
將第10行至第20行中匹配的舊文本替換爲新文本 |
U |
將選中的文本所有改成大寫 |
u |
將選中的文本所有改成小寫 |
命令 |
說明 |
u |
撤銷上一次的操做 |
CTRL-R |
重作,即撤銷的撤銷 |
|
|
命令 |
說明 |
ZZ |
保存當前文件並退出vim |
:q! |
放棄全部修改並退出 |
:e! |
放棄全部修改並從新載入改文件的原始內容 |
:set aw或:set autowrite |
在執行:next、:rewind、:last、:first、:previous、:stop、:suspend、:tag、:!、:make、CTRL-] 和 CTRL-^命令時就會自動將修改的內容保存 |
:set autowriteall或者:set awa |
和:set aw相似,除了以上命令外,執行":edit"、":enew"、":quit"、":qall"、":exit"、":xit"、":recover" 和關閉 Vim 窗口時也都會將修改的內容保存 |
Ctrl+] |
跳轉到函數定義,Ctrl+t能夠調回調用處 |
|
|
|
|
命令 |
說明 |
:e 文件路徑\文件名A |
編輯文件A |
:vim 文件A、文件B…… |
編輯多個文件,只顯示第一個文件,完成該文件的編輯後使用「:n」能夠保存修改爲果,並繼續下一個文件編輯 |
:args |
顯示當前編輯的文件 |
:(x)n |
編輯文件列表後第x個文件 |
:(x)prev |
編輯文件列表前第x個文件 |
:last |
編輯最後一個文件 |
:first |
編輯第一個文件 |
:args a b c…… |
從新定義一個文件列表 |
CTRL-^ |
在文件間切換 |
文件標記 |
在編輯文件a時執行"50%mF"其中F是一個文件標記,標記的位置是文件a的中間,或者執行"GnB"表示將文件a的最後一行標記爲B,那麼在其餘文件b中執行F或B就能回到a文件的中間或最後一行。CTRL-O和CTRL-I能夠跳轉到較早的位置和靠後的位置。 |
vim -R file |
以只讀方式打開文件 |
vim -M file |
以強制只讀方式打開文件 |
:sav a.c |
將當前文件保存並更名爲a.c |
:f(ile) a.c |
將當前編輯的文件更名爲a.c可是不保存 |
:split |
分割一個窗口 |
CTRL-W |
切換當前活動窗口 |
:close |
關閉當前窗口 |
:only |
關閉除當前窗口外其餘全部窗口 |
: split a.c |
爲文件a.c分割一個窗口做爲編輯a的窗口 |
:new |
分割一個窗口並開始編輯一個空緩衝區 |
:vsplit、:vsplit a.c 和:vnew |
垂直分割一個窗口 |
CTRL- W h |
到左邊的窗口 |
CTRL- W j |
到下面的窗口 |
CTRL- W k |
到上面的窗口 |
CTRL- W l |
到右邊的窗口 |
CTRL- W t |
到頂部窗口 |
CTRL- W b |
到底部窗口 |
針對全部窗口的命令 |
":qall"放棄全部操做並退出,":wall"保存全部,":wqall"保存全部並退出。 |
l 其餘
一、使用vimdiff查看不一樣
"vimdiff main.c~ main.c",另外一種進入diff模式的辦法能夠在Vim運行中操做。編輯文件"main.c",而後打開另外一個分隔窗口顯示其不一樣:
":edit main.c"
":vertical diffpatch main.c.diff"。
二、頁籤
命令":tabe(dit) thatfile"在一個窗口中打開"thatfile",該窗口占據着整個的Vim顯示區域。命令":tab split/new"結果是新建了一個擁有一個窗口的頁籤。以用"gt"命令在不一樣的頁籤間切換。
最後附上一張vim經常使用按鍵圖。