vim簡明教程

模式

VIM支持四種基本的模式,即普通模式,插入模式,視圖模式和命令行模式.html

普通模式Normal mode

普通模式是最經常使用的,該模式下,能夠執行不少編輯操做以及其餘的命令,程序員

vim最經常使用的效率最高的操做均是在普通模式下執行的.若是編輯文件須要中止一會或者你去休息了,最好讓vim處於普通模式下.vim

在任何模式下都可使用[ESC]按鍵退回到普通模式下,<C-c>命令也能夠作到這點.函數

可是執行ESC命令時,手指活動的範圍太大,操做多了會以爲很累.插入模式下能夠執行<C-[>命令回到普通模式下.spa

 

插入模式Insert mode

a/A命令行

i/I設計

corm

 

視圖模式Visual mode

V:選擇當前行進入視圖模式htm

v:選擇當前字符進入視圖模式內存

<C-v>:進入列塊視圖模式

gv:重選上次的選取

 

命令模式Command mode

: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

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}:全文搜索字符串

*:全文搜索光標下的字符串,並跳轉到符合匹配的字符串位置

 

Indent/Undent

插入模式下:

<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能夠在當前窗口中直接打開該文件

相關文章
相關標籤/搜索