1. 程式人生 > >vim:常用命令

vim:常用命令

模式切換

在插入模式或命令列模式中按“ESC”或者“Ctrl+[”即可進入普通模式,在普通模式中輸入“i”或者“a”即可進入插入模式,輸入“:”進入命令列模式。

開啟檔案

命令列模式中輸入": 檔案路徑+檔名"可開啟檔案。

文件編輯

文件編輯是vim最主要的功能,分幾個點來講述。

  1. 移動游標

在普通模式下,移動游標

按鍵

說明

h

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

將當前行置為螢幕底端

 

  1. 插入文字

按以下按鍵將從普通模式進入插入模式,並可從相應位置開始輸入。

命令

說明

i

在當前光標出進行編輯

I

在行首插入

A

在行末插入

a

在游標後插入

  • o

在當前行後插入一個新行

O

在當前行前插入一個新行

S或cc

改變整行

C或c$

改變當前游標到行尾的內容

s或cl

修改一個字元

 

  1. 選擇文字

在virtual模式下被選中的文字會高亮顯示,可以對選中的文字進行復制貼上及刪除等操作。

命令

說明

v

進入可視模式,從游標位置開始,游標所經過的地方被選中,再按一次v結束

V

從當前行開始,游標所經過的行都會被選中,再按一次V結束

Ctrl+v

從游標當前位置開始,選中游標起點和終點所構成的矩形區域,再按一次Ctrl+v結束

ggVG

選中全部文字,gg跳到首行,V選中當前行(首行),G跳到末尾

ve

選中一個單詞

 

  1. 複製黏貼

命令

說明

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個單詞

 

  1. 刪除文字

命令

說明

x或diw

刪除一個字元

X

刪除當前游標之前的字元

dd

刪除整行,下面的行會自動移上來,刪除的內容保留在剪下板中可以貼上到其他地方,其他刪除同

J

刪除換行符,即兩行會合成一行

D

刪除當前游標至行尾的內容

dw

刪除自當前游標至下一個word的開頭

dG

刪除當前行至檔案尾的內容

dgg

刪除當前行至檔案頭的內容

dw

刪除游標之後的單詞剩餘部分

d$      

刪除游標之後的該行剩餘部分

 

  1. 搜尋和替換

檔案內搜尋字串

命令

說明

/字串

往游標之後尋找該字串

?字串

往游標之前尋找該字串

(計數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

將選中的文字全部改為小寫

 

  1. 重做編輯

命令

說明

u

撤銷上一次的操作

CTRL-R

重做,即撤銷的撤銷

 

 

 

  1. 儲存和放棄編輯

命令

說明

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 視窗時也都會將修改的內容儲存

  1. 函式跳轉

Ctrl+]

跳轉到函式定義,Ctrl+t可以調回呼叫處

 

 

 

 

 

 

  1. 檢視檔案和檔案間切換

 

命令

說明

: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"儲存所有並退出。

 

 

其他

1、使用vimdiff檢視不同
  "vimdiff main.c~ main.c",另一種進入diff模式的辦法可以在Vim執行中操作。編輯檔案"main.c",然後開啟另一個分隔視窗顯示其不同:
  ":edit main.c"
  ":vertical diffpatch main.c.diff"。
2、頁籤
   命令":tabe(dit) thatfile"在一個視窗中開啟"thatfile",該窗口占據著整個的Vim顯示區域。命令":tab split/new"結果是新建了一個擁有一個視窗的頁籤。以用"gt"命令在不同的頁籤間切換。

最後附上一張vim常用按鍵圖。