vim:經常使用命令

模式切換vim

在插入模式或命令行模式中按「ESC」或者「Ctrl+[」便可進入普通模式,在普通模式中輸入「i」或者「a」便可進入插入模式,輸入「:」進入命令行模式。函數

打開文件ui

命令行模式中輸入": 文件路徑+文件名"可打開文件。spa

文檔編輯命令行

文檔編輯是vim最主要的功能,分幾個點來說述。blog

  1. 移動光標

在普通模式下,移動光標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

將當前行置爲屏幕底端

 

  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"保存全部並退出。

 

 

其餘

一、使用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經常使用按鍵圖。

相關文章
相關標籤/搜索