VIM支持四種基本的模式,即普通模式,插入模式,視圖模式和命令行模式.html
普通模式是最經常使用的,該模式下,能夠執行不少編輯操做以及其餘的命令,程序員
vim最經常使用的效率最高的操做均是在普通模式下執行的.若是編輯文件須要中止一會或者你去休息了,最好讓vim處於普通模式下.vim
在任何模式下都可使用[ESC]按鍵退回到普通模式下,<C-c>命令也能夠作到這點.函數
可是執行ESC命令時,手指活動的範圍太大,操做多了會以爲很累.插入模式下能夠執行<C-[>命令回到普通模式下.spa
a/A命令行
i/I設計
corm
V:選擇當前行進入視圖模式htm
v:選擇當前字符進入視圖模式內存
<C-v>:進入列塊視圖模式
gv:重選上次的選取
:set number顯示行號
:q/w
Vim [filename,...]
Vim [filename,...] +line_num 打開文件並定位到指定行
:q無修改退出
:q!放棄修改強制退出
:wq保存修改退出
:x 同:wq
ZZ 同:wq
ZQ 同去q!
:w保存緩衝區內容到文件
命令行模式下輸入須要查看的命令或者內容便可查看幫助文檔,例如
:h c 查看c命令的幫助文檔
:h motion 查看有關motion的內容
h/j/k/l可用於當前光標位置的左上右下移動,
h:光標移動到左邊一個字符,若是到達行首,則進入上一行
j:光標移動到下一行相同的位置
k:光標向上移動一行到相同的位置
l:光標向右移動一個字符,若是到達行尾,則進入下一行
須要注意的是,上面的針對操做針對實際行。
這是最基本最簡單的移動方式,固然這也是最低效的。
行是以分行符來區分的,即一個分行符內的文本爲一個實際行,無論屏幕自動分行顯示了多少行,都是一個實際行,若是超出屏幕窗口顯示長度而自動分行,那麼此時這些行稱爲屏幕行。
若是是在屏幕行上下移動的話則須要在上述命令前加g。
F/f{char}
行內搜索字符移動,f{char}搜索本行光標以後的某個字符,並移動到第一個匹配字符後的一個位置;F命令正好是反方向的。
T/t{char}:
t命令與f命令類似,只是他會移動到匹配字符的前一個字符位置上。
/{chars}
全文搜索匹配的字符串,並移動到第一個匹配字符串的首位置。
*
在當前光標所在的單詞或者字符串位置,按鍵*會查找匹配該單詞或者字符串,並進入下一個匹配字符串的首位置。
gg:文件頭部
G:文件尾部
nG:移動到指定行,n爲行號
0:行首
$:行尾
^:行首第一個非空字符
H:屏幕頭部
L:屏幕底部
M:屏幕中間
能夠在H/L/M前面加上數字,此時這些數字不表明倍數,而是指距離目標位置多少行。
好比3H指的是光標定位到距離屏幕頂部3行的位置。
<C-f>:向下翻一頁
<C-b>:向上翻一頁
<C-d>:向下翻半頁
<C-u>:向上翻半頁
<C-e>:光標位置不變,向上按行滾屏
zz:滾動屏幕,使本行顯示在屏幕中間
E:移動到本字符串或者下一個字符串的尾部
e:移動到本單詞或者下一個單詞的尾部
B: 移動到上一個字符串的首部
b:移動到上一個單詞的首部
W:移動到下一個字符串的首部
w:移動到下一個單詞的首部
) 移至下一個句子(sentence)首。
( 移至上一個句子(sentence)首。
} 移至下一個段落(paragraph)首。
{ 移至上一個段落(paragraph)首。
sentence 是以 . ! ? 爲區格。
paragraph 是以空白行爲區格。
有時咱們須要在函數間內快速移動,對於程序員來講,這是最快的最適合的移動方式。
[[:進入上一個函數的起始處
]]:進入下一個函數的起始處
像<>/{}/()這樣的成對出現的標記符號,能夠快速的定位.
光標先定位到其中一個,而後執行%便可定位到另外一個標記位置上.
刪除即剪切
d{motion}
dd:刪除光標所在的整行
c{motion}
C:刪除當前光標到行尾,而且進入插入模式
cc:刪除本行內容,而且進入插入模式
插入模式內刪除
<C-w>:刪除光標到本字符串起始處
<C-u>:刪除光標到行首處
X:刪除光標前一個字符
x:刪除光標所在的字符
y{motion}
yy複製當前光標所在的整行。
若是不指定寄存器,那麼文本將會複製到默認寄存器和選擇專用寄存器中,若是想使用寄存器,那麼在該命令以前指明寄存器。請參考【寄存器】一節。
執行粘貼的是p命令。
若是複製的是非行文本,那麼在當前光標以後粘貼,若是是行,那麼粘貼到下一行,這是小寫的p命令;大寫的P命令正好相反。
另外若是僅執行p/P命令,那麼,粘貼的是默認寄存器中的文本,若是向粘貼某個寄存器中複製的文本,那麼必須在前面指明寄存器。請參考【寄存器】一節。
u
O/o
Motion用於執行刪除拷貝等操做符的做用範圍,簡單而言就是選取。
aw:整個單詞,包含先後的空白符
iw:整個單詞,不包括先後的空白符
i/a{
i/a[
i/a(
a/it:html等標記語言的tag範圍
t/T{char}
F/f{char}
典型:
daw:刪除整個單詞包括先後的空白符
Ctrl+r
恢復撤銷的修改。
.
點命令支持對上一次的操做重複執行。合理設計命令再執行點命令將會大大提升執行效率。
寄存器是文件編輯時使用到,能夠臨時保存文件的刪除複製的內容。靈活使用寄存器將大大提升複製和刪除的效率。
使用寄存器
「{register}
默認寄存器
Vim默認使用的寄存器,若是執行文件操做時不指定寄存器時,將默認使用。
等同於」」
複製專用寄存器
0:在執行復制操做時,若是沒有指定寄存器,那麼vim將會將複製的內容將保存在該寄存器。
字母寄存器
a-z:新的內容將會覆蓋舊內容
A-Z:新內容追加的舊內容上
系統寄存器
Vim與系統剪貼板的聯繫經過寄存器「+」,這就容許vim從系統剪貼板拷貝其餘程序複製的內容,或者將vim的內容複製到寄存器提供給其餘程序使用。
黑洞寄存器
_:若是真正想刪除文件內容而且再也不使用,那麼應該使用黑洞寄存器,使用後該內容將一去不返!
查找
f{char}:本行內正向搜索字符
F{char}:本行內反向搜索字符
/{chars}:全文搜索字符串
*:全文搜索光標下的字符串,並跳轉到符合匹配的字符串位置
插入模式下:
<C-d>:當前行左縮進tab
<C-t>:當前行右縮進tab
普通模式下
>>:當前行右縮進一個tab
<<:當前行左縮進一個tab
視圖模式下:
>>:當前選中行右縮進一個tab
<<:當前選中行左縮進一個tab
Vim原生支持自動補全功能。可在插入模式下觸發。
插入模式下觸發方法總結
命令 |
用途 |
<C-p> |
普通關鍵字 |
<C-n> |
普通關鍵字 |
<C-x><C-n> |
當前緩衝區關鍵字 |
<C-x><C-i> |
包含文件關鍵字,例如c/cpp語言下的include包含進來的文件中匹配。 |
<C-x><C-]> |
標籤文件關鍵字 |
<C-x><C-k> |
字典查找 |
<C-x><C-l> |
整行補全 |
<C-x><C-f> |
文件名補全 |
<C-x><C-o> |
全能補全,根據光標所在的上下文的短範圍文本進行匹配補全 |
|
|
若是匹配選項存在多個的話,那麼會彈出選擇下拉菜單,支持可使用<C-n><C-p>選擇上一項或者下一項,固然也可使用上下箭頭按鍵選擇。
r{char}:替換單個字符
R{chars}:按位替換,至關於【insert】按鍵功能
Substitute替換命令
:[range]s/{pattern}/{string}/[flags]
:s/src/des:替換當前行第一個匹配的字符串
:s/src/des/g:替換當前行全部匹配的字符串
:%s/src/des/g:替換全文匹配的字符串
:%s/src/des/gc:替換全文匹配的字符串,替換時詢問是否替換
VIM使用緩衝區來管理窗口上的文件顯示,每一個緩衝區僅針對一個文件,一個文件可使用多個緩衝區。
緩衝區是文件加載到內存後的顯示,因此對文件的修改其實是對緩衝區的修改,僅當執行了保存,緩衝區的內容纔會寫入真實的文件中。
緩衝區列表在vim同時打開多個文件時使用很是方便,當僅限於查看而已,不能使用緩衝區命令中途打開新文件。
查看當前緩衝區列表
:ls
查看指定緩衝區
命令 |
用途 |
:b[uffer]f |
激活並顯示第一個緩衝區 |
:b[uffer]l |
激活並顯示最後緩衝區 |
:b[uffer]n |
激活並顯示下一個緩衝區 |
:b[uffer]p |
激活並顯示上一個緩衝區 |
:b[uffer] N |
激活並顯示指定序號的緩衝區 |
:b[uffer] path |
激活並顯示指定文件路徑的緩衝區 |
刪除緩衝區
:bdelete N1[,N2...Nn]
:N,M bdelete
:tabedit {filename}命令在一個新的標籤頁打開文件,若是省略了{filename}參數,那麼vim建立一個新的標籤頁,可是緩衝區空。
<C-w>+T:若是當前標籤頁包含了多個緩衝區窗口,使用該命令能夠將當前緩衝區窗口移動到一個新的標籤頁。
命令 |
用途 |
:tabe[dit] {filename} |
在新的標籤頁總打開filename |
<C-w>+T |
把當前窗口移到一個新標籤頁 |
:tabc[lose] |
關閉當前標籤頁以及其中的全部窗口 |
:tabo[nly] |
只保留當前活動標籤頁,關閉全部其餘的標籤頁 |
標籤頁切換
Ex命令 |
普通模式命令 |
用途 |
:tabn[ext] {N} |
{N}gt |
切換到編號爲{N}的標籤頁 |
:tabn[ext] |
gt |
切換到下一個標籤頁 |
:tabp[revious] |
gT |
切換到上一個標籤頁 |
標籤頁移動
命令 |
用途 |
:tabmove N |
將當前活動的標籤頁移動到制定編號的位置 |
:tabmove 0 |
將當前活動標籤頁移動到開頭 |
:tabmove |
將當前活動標籤頁移動到結尾 |
VIM支持分屏顯示。
左右分屏:<C-w>+v
上下分屏:<C-w>+s
在使用<C-w>執行分屏時,是以當前緩衝區爲基準的,同時獲得的新的緩衝區將於原先的保持同步。
若是須要打開其餘的文件,那麼使用命令:e[dit] filename
或者從命令模式中分割窗口
:vsplit filename
:split filename
關閉當前分屏:<C-w>+c或者<C-w>+q,須要注意的是若是當前僅有一個屏幕,那麼執行<C-w>+q會退出vim。
使用<C-w>+o關閉全部其餘的分屏
使用<C-w>+w能夠循環切換分屏
切換分屏:<C-w>+h/j/k/l,該命令將光標在幾個不一樣的屏幕之間切換
命令模式下:pwd
命令模式下:He,水平分屏瀏覽當前目錄
命令模式下:Ve,垂直分屏瀏覽當前目錄
若是命令後方追加!,那麼將會調整分屏的次序。
ddp
進入命令模式,
:!{cmd}
好比查看當前所在路徑的全部文件清單
:!ls
:lcd {path}該命令能夠設定當前窗口的本地工做目錄,使用該命令可讓咱們不一樣的標籤頁工做在不一樣的目錄下。
當光標處於一個文件路徑時,此時在普通模式下執行gf能夠在當前窗口中直接打開該文件