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常用按键图。

猜你喜欢

转载自www.cnblogs.com/heart-flying/p/10148042.html