你的位置:首页 > 默认分类

Vim常见使用命令总结完整分享

2009-10-30 浏览:(1499) 默认分类 评论(0)

vim是linux下命令行一款经典编辑器,操作简单、功能强大,这是很多unix上元老级程序员的挚爱。这是我总结整理的vim最常用的命令集合,没事常阅读,最重要的是有问题了,尝试用这些东西去解决问题,不一定是高效快捷的,但起码是有效的。

打开vim的方式

vim filename #打开文件filename,并将光标置于第一行首

vim +n filename #打开文件filename,并将光标置于第 n 行首

vim + filename #打开文件filename,并将光标置于最后一行

vim + /pattern file #打开文件file,并将光标置于其中第一个于pattern 匹配的字符串处

vim –r filename #在上次正用vi编辑filefame发生系统崩溃后,恢复filename

vim file1 … filen #打开多个文件,依次对之进行编辑

vim -o file1 … filen #用水平分隔的方式打开多个文件然后进行编辑

vimdiff filename1 filename2 #用垂直分割的方式打开两个文件filename1,filename2并显示不同比较

插入数据操作

行操作:

I #在光标所在行首插入文本

A #在光标所在行尾添加文本

o(open) #在光标所在行下面添加一行

O #在光标所在行上面添加一行

nS #从当前行开始,删除向下 n 行并进入编辑模式,若无 n 删除当前所在行,并进入编辑模式

:r filename #在编辑数据中读入一个文件内容数据,并把这些数据添加到光标所在行后面

字符操作:

i(insert) #在光标前插入文本

a(append) #在光标后插入文本

r(Replace) #替换光标所在处字符,结束替换

R #替换多个字符,以按下 [Esc] 键标志替换结束

ns #从当前光标位置处开始,删除 n 个字符并进入编辑模式,若无 n 删除一个字符,并进入编辑模式

改变某区域:

可以重复的:

[c]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]

c: #表示改变操作

重复操作次数: #num 表示操作重复次数

操作区域选择:

h #改变光标前一个字符

l #改变光标所在处的字符

j #改变本行与下一行

k #改变本行与上一行

w #改变光标开始到下一个单词词首处

b #改变光标开始到上一个单词词首处

e #改变光标开始到这个单词的结尾处

( #改变光标开始到句子结束处

) #改变光标开始到句子开始处

{ #改变光标开始到段落开始处

} #改变光标开始到段落结束处

$ #改变从光标开始处到行尾处

G #改变从光标所在行到行尾处

/word #改变从光标开始处到下个word字符串,不含word ( word 指代任意字符串,正则表达式 )

?word #改变从光标开始处到上个word 字符串,不含word ( word 指代任意字符串,正则表达式 )

tc #改变从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 )

Tc #改变从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 )

fc #改变从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 )

Fc #改变从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 )

`c #改变从光标开始到标记 c 这个位置

不可重复的:

[c]+[ 0 / ^ / H / L]

c: #表示改变操作

操作区域选择:

0 #改变从光标所在处到某一行的开始位置

^ #改变到某一行的第一个字符位置(不包括空格或TAB字符)

L #改变直到屏幕上最后一行的内容

H #改变直到屏幕上第一行的内容

[c]+[i]+[ { / } / ( / ) / " / ' ]

c: #表示改变操作

i: #表示 in 即在里面的意思

操作区域选择:

{ #改变在 {} 中内容( 要求光标在 {} 内 )

} #改变在 {} 中内容( 要求光标在 {} 内 )

[ #改变在 [] 中内容( 要求光标在 [] 内 )

] #改变在 [] 中内容( 要求光标在 [] 内 )

( #改变在 () 中内容( 要求光标在 {} 内 )

) #改变在 () 中内容( 要求光标在 () 内 )

" #改变在 "" 中内容( 要求光标在 "" 内 )

' #改变在 '' 中内容( 要求光标在 '' 内 )

保存/退出

:q #退出vim 返回到shell,若有修改未被保存,vi 在末行给出提示信息并不退出vim到 shell

:q! #退出 vim 返回到 shell,放弃未保存的修改

:wq #保存后退出,无论文件是否有修改,都更新文件的修改时间

:x #保存后退出,若文件没有修改的话,不更新文件的修改时间

:w #将编辑的数据写入硬盘中

:w! #若文件属性为"只读"时,强制写入该文件

:w filename #写入当前文件到 filename 文件

ZZ #若文件没有更动,则不保存离开,若文件被更动过,则保存后离开

:n1,n2 w filename #将 n1 到 n2 的内容保存到 filename 这个文件中

移动光标

位移

字符操作:

nh / n← #向左移动 n 字符,无 n 移动一字符

nl / n→ #向右移动 n 字符,无 n 移动一字符

n #n 表示“数字”,光标会向右移动这一行 n 个字符.

0 #这是数字 “0”:移动到这一行的最前面字符处

^ #移动到这一行的最开始字符处行操作:

nj / n↓ #向下移动 n 行,无 n 移动一行

nk / n↑ #向上移动 n 行,无 n 移动一行

[Ctrl+p] #光标上移一行

[Ctrl+n] #光标下移一行

n+ #光标下移到 n 行头,若没有 n 光标移到下行行头

n- #光标上移到 n 行头,若没有 n 光标移到上行行头

n$ #光标下移到 n 行尾,若没有 n 则移动到本行行尾

n_ #向下移动 n-1 行,并光标移动到非空白行首

H #光标移动到这个屏幕的最上方哪一行

M #光标移动到这个屏幕的中央哪一行

L #光标移动到这个屏幕的最下方哪一行

nG #n 为数字.移动到这个文件的第 n 行.若没有 n 则移动到最后一行

gg #移动到这个文件的第一行,相当于 1G

n #向下移动 n 行,无 n 移动一行

跳转

W / w #光标右移一个字至字首.

B / b #光标左移一个字至字首.

E / e #光标右移一个字至字尾.

( #光标移到上个句子句首.

) #光标移到下个句子句首.

{ #光标移到上个段落句首.

} #光标移到下个段落句首.

fc #光标跳转到本行下一个字符 c 处( c 指代任意字符 )

Fc #光标跳转到本行上一个字符 c 处( c 指代任意字符 )

tc #光标跳转到本行下一个字符 c 的前一个字符处( c 指代任意字符 )

Tc #光标跳转到本行上一个字符 c 的后一个字符处( c 指代任意字符 )

/word #光标跳转到下一个字符串word 处,并把所有word 单词高亮显示( word 指代任意字符串,正则表达式 )

?word #光标跳转到上一个字符串word 处,并把所有word 单词高亮显示( word 指代任意字符串,正则表达式 )

# #光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示

* #光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示

gd #将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词

gD #将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词

`. #跳转至上次编辑位置

`c #将光标转移到书签 c 处( c 为任意字符 )

下面两个与 / 与 ? 组合着用:

n #下一个匹配(如果是/搜索,则是向下的下一个,?搜索则是向上的下一个,但其实它只会在高亮字符中切换)

N #上一个匹配(同上)

与 f/F 配合使用的命令:

; #重复上一个f命令

还原与重做

. #重复前一个操作

u #还原前一个操作

[Ctrl]+r #重做上一个操作

滚动屏幕

[Ctrl+f] #屏幕“向下”移动一页,相当于[Page Down]按键

[Ctrl+b] #屏幕“向上”移动一页,相当于[Page Up]按键

[Ctrl+d] #屏幕“向下”移动半页

[Ctrl+u] #屏幕“向上”移动半页

[Ctrl+e] #屏幕向下滚一行

[Ctrl+y] #屏幕项上滚一行

nz #将第 n 行滚至屏幕顶部。不指定 n 时将当前行滚至屏幕顶

:$ #屏幕滚到文章最后一行

:0 #屏幕滚到文章最开始一行

vim是linux下命令行一款经典编辑器,操作简单、功能强大,这是很多unix上元老级程序员的挚爱。这是我总结整理的vim最常用的命令集合,没事常阅读,最重要的是有问题了,尝试用这些东西去解决问题,不一定是高效快捷的,但起码是有效的。

复制/粘贴/删除

字符操作:

nx #向后删除 n 个字符,若没有 n 向后删除一个字符

nX #向前删除 n 个字符,若没有 n 向前删除一个字符

d0 #那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符

d$ #删除游标所在处,到该行的最后一个字符

y0 #复制光标所在的那个字符到该行行首的所有数据

y$ #复制光标所在的那个字符到该行行尾的所有数据

p #将已复制的数据在光标下一列贴上

P #将已复制的数据在光标上一列贴上

行操作:

ndd #删除光标所在的向下 n 列,若没有 n 删除游标所在的那一整列

dnG #删除光标所在到第 n 行的所有数据,若没有 n 删除光标所在到最后一行的所有数据

nyy #复制光标所在的向下 n 行,若无 n 复制游标所在的那一行

ynG #复制游标所在列到第n行的所有数据,若无 n 复制游标所在行到最后一行的所有数据

J #将光标所在列与下一列的数据结合成同一列

删除某区域:

可以重复的:

[d]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]

d: #表示删除操作

重复操作次数: #num 表示操作重复次数

操作区域选择:

h #删除光标前一个字符

l #删除光标所在处的字符

j #删除本行与下一行

k #删除本行与上一行

w #删除光标开始到下一个单词词首处

b #删除光标开始到上一个单词词首处

e #删除光标开始到这个单词的结尾处

( #删除光标开始到句子结束处

) #删除光标开始到句子开始处

{ #删除光标开始到段落开始处

} #删除光标开始到段落结束处

$ #删除从光标开始处到行尾处

G #删除从光标所在行到行尾处

/word #删除从光标开始处到下个 word 字符串,不含 word ( word 指代任意字符串,并可以使用正则表达式 )

?word #删除从光标开始处到上个 word 字符串,不含 word ( word 指代任意字符串,并且可以使用正则表达式 )

tc #删除从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 )

Tc #删除从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 )

fc #删除从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 )

`c #删除从光标开始到标记 c 这个位置

不可重复的:

[d]+[ 0 / ^ / H / L / { / }[ / ]( / ) / " / ']

d: #表示删除操作

操作区域选择:

0 #删除从光标所在处到某一行的开始位置

^ #删除到某一行的第一个字符位置(不包括空格或TAB字符)

L #删除直到屏幕上最后一行的内容

H #删除直到屏幕上第一行的内容

[d]+[i]+[ { / }[ / ]( / ) / " / ']

d: #表示删除操作

i: #表示 in 即在里面的意思

操作区域选择:

{ #删除在 {} 中内容( 要求光标在 {} 内 )

} #删除在 {} 中内容( 要求光标在 {} 内 )

[ #删除在 [] 中内容( 要求光标在 [] 内 )

] #删除在 [] 中内容( 要求光标在 [] 内 )

( #删除在 () 中内容( 要求光标在 {} 内 )

) #删除在 () 中内容( 要求光标在 () 内 )

" #删除在 "" 中内容( 要求光标在 "" 内 )

' #删除在 '' 中内容( 要求光标在 '' 内 )

复制某区域:

可以重复的:

[y]+[num]+[ h / j / k / l / w / b / e / ( / ) / { / } / $ / G / /word / ?word / tc / Tc / fc / Fc / `c ]

y: #表示复制操作

重复操作次数: #num 表示操作重复次数

操作区域选择:

h #复制光标前一个字符

l #复制光标所在处的字符

j #复制本行与下一行

k #复制本行与上一行

w #复制光标开始到下一个单词词首处

b #复制光标开始到上一个单词词首处

e #复制光标开始到这个单词的结尾处

( #复制光标开始到句子结束处

) #复制光标开始到句子开始处

{ #复制光标开始到段落开始处

} #复制光标开始到段落结束处

$ #复制从光标开始处到行尾处

G #复制从光标所在行到行尾处

/word #复制从光标开始处到下个word字符串,不含word ( word 指代任意字符串,正则表达式 )

?word #复制从光标开始处到上个word字符串,不含word ( word 指代任意字符串,正则表达式 )

tc #复制从光标开始处到下个 c 字符处,不含 c ( c 指代任意字符 )

Tc #复制从光标开始处到上个 c 字符处,不含 c ( c 指代任意字符 )

fc #复制从光标开始处到下个 c 字符处,含 c ( c 指代任意字符 )

Fc #复制从光标开始处到上个 c 字符处,含 c ( c 指代任意字符 )

`c #复制从光标开始到标记 c 这个位置

不可重复的:

[y]+[ 0 / ^ / H / L]

y: #表示复制操作

操作区域选择:

0 #复制从光标所在处到某一行的开始位置

^ #复制到某一行的第一个字符位置(不包括空格或TAB字符)

L #复制直到屏幕上最后一行的内容

H #复制直到屏幕上第一行的内容

[y]+[i]+[ { / } / ( / ) / " / ' ]

y: #表示复制操作

i: #表示 in 即在里面的意思

操作区域选择:

{ #复制在 {} 中内容( 要求光标在 {} 内 )

} #复制在 {} 中内容( 要求光标在 {} 内 )

[ #复制在 [] 中内容( 要求光标在 [] 内 )

] #复制在 [] 中内容( 要求光标在 [] 内 )

( #复制在 () 中内容( 要求光标在 {} 内 )

) #复制在 () 中内容( 要求光标在 () 内 )

" #复制在 "" 中内容( 要求光标在 "" 内 )

' #复制在 '' 中内容( 要求光标在 '' 内 )

高亮显示

/word #将光标跳转到下一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,正则表达式 )

?word #将光标跳转到上一个字符串 word 处,并把所有 word 单词高亮显示( word 指代任意字符串,正则表达式 )

gd #将与光标所在处的单词相同的单词全部高亮显示,并跳转到上一个高亮显示的单词

gD #将与光标所在处的单词相同的单词全部高亮显示,并跳转到最前面一个高亮显示的单词

# #光标跳转到下个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示

* #光标跳转到上个与光标所在处单词相同的单词,并把所有与光标所在处的相同的单词高亮显示

:nohl #取消高亮显示

行移动操作

>> #将当前行右移一个单位

<< #将当前行左移一个单位(一个tab符)

== #自动缩进当前行

书签

mc #把当前位置记录为书签 c ( c 为任意字符 )

#当定义多个位置的标签为一样时,只有最后一个定义的位置标签会生效

`c #将光标转移到书签 c 处( c 为任意字符 )

十六进制查看文本内容

:%!xxd #按十六进制查看当前文件

:%!xxd -r #从十六进制返回正常模式

自动补全

[Ctrl+n] #自动补全(前提是以前打过的单词)

[Ctrl+p] #自动补全(前提是以前打过的单词)

标记文本

进入标记文本模式

v #进入标记文本模式,单字符模式

V #进入标记文本模式,行模式

[ctrl+v] #进入标记文本模式,列模式,类似于UE的列模式

对标记文本模式中区域选择

aw #选中一个单词,含单词后的空格

as #选中一个句子,含句号后的空格

ap #选中一个段落,含段落后的空格

ab #选中()括号中的所有内容,含()

aB #选中{}括号中的所有内容,含{}

iw #选中一个单词,不含单词后的空格

is #选中一个句子,不含句号后的空格

ip #选中一个段落,不含段落后的空格

ib #选中()括号中的内容,不含()

iB #选中{}括号中的内容,不含{}

除此之外还有上面光标移动的方法,但是要除去组合键,如:[ctrl]+[p]

移动标记文本模式中光标位置

o #光标在选择区域中的对角线之间的跳转

O #光标在选择区域中的横纵之间的跳转

当在 V 与 [ctrl]+[v] 模式中

我们除了 o,O 来移动光标位置外,还可以通过移动光标位置中一些方法来移动光标位置(不是所有而是其中一些)

对标记文本模式中数据操作

~ #将选中块中的内容大小写翻转

u #将选中块中的内容转成小写

U #将选中块中的内容转成大写

y #复制选中块中的内容

d/D/x/X #删除选中块中的内容

窗口操作

:vne [filename] #打开文件 filename,并把光标所在窗口沿横向分为两个窗口

:sp [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口

:S [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口

:new [filename] #打开文件 filename,并把光标所在窗口沿纵向分为两个窗口

+------------------------------------------------------------------------------+

在 new 前面可以加的参数:

leftabove #当前窗口的左上方

aboveleft #同上

rightbelow #当前窗口的右下方

belowright #同上

topleft #整个 Vim 窗口的最上面或者最左边

botright #整个 Vim 窗口的最下面或者最右边

+------------------------------------------------------------------------------+

:only #关闭除了编辑以外的窗口,但是那些窗口中要是有文本被改写过并且没有保存那么操作将失败

:close #关闭编辑窗口,如果编辑窗口文本修改过且未保存,或编辑窗口为唯一窗口的话,操作失败

:vertical diffsplit [file] #纵向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同

:diffsplit [file] #横向为 file 开个新的编辑窗口,并且比较原编辑文件和 file 编辑文件的不同

:res -n #窗口高度减小n

:res +n #窗口高度增大n

[ctrl+w]+[=] #窗口等宽

[ctrl+w]+[h] #将光标移动到左方的窗口

[ctrl+w]+[←] #将光标移动到左方的窗口

[ctrl+w]+[l] #将光标移动到右方的窗口

[ctrl+w]+[→] #将光标移动到右方的窗口

[ctrl+w]+[j] #将光标移动到下方的窗口

[ctrl+w]+[↓] #将光标移动到下方的窗口

[ctrl+w]+[k] #将光标移动到上方的窗口

[ctrl+w]+[↑] #将光标移动到上方的窗口

[ctrl+w]+[t] #将光标移动到最上方的窗口

[ctrl+w]+[b] #将光标移动到最下方的窗口

[ctrl+w]+[ctrl+r] #将光标所在窗口下移

[ctrl+w]+[q] #退出光标所在窗口,相当于在光标所在窗口的命令行模式中输入:q

[ctrl+w]+[+] #扩大所在窗口

[ctrl+w]+[-] #缩小所在窗口

对所有窗口执行命令

:qall #退出所有窗口,但是如果你有一个窗口发生改写但未保存 vim 是不会退出的

:wall #保存所有修改过的窗口

:wqall #保存所有修改过的窗口并关闭,然后退出 vim

:qall! #强制退出所有窗口,然后退出 vim

多档案编辑

:n #编辑下一个档案

:N #编辑上一个档案

:files #列出目前这个 vim 的开启的所有档案

执行shell命令

:sh #打开 shell,可执行shell命令,输入exit退出shell返回到vim

:!cmd #直接执行 shell ( cmd 表示为任意 shell 命令 )

命令行下行操作

:n1,n2 co n3 #将 n1 行到 n2 行之间的内容拷贝到第 n3 行下.若无『 ,n2』则复制 n1 到 n3 行下

:n1,n2 m m3 #移动 n1 行到 n2 行之间的内容移至第 n3 行下.若无『 ,n2』则将 n1 内容移到 n3 行下

:n1,n2 d #删除 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行删除

:n1,n2 y #复制 n1 行到 n2 行之间的内容,『 ,n2』则将 n1 行复制

:[range]s/{pattern}/{string}/[flag] [count] #字符替换

+------------------------------------------------------------------------------+

格式说明:

range #表示行数

% #表示所有行

n1,n2 #表示由 n1 行到 n2 行之间,若无 n2 则表示在 n1 行处

s #表示substitution,替换的意思

pattern #表示被替换的字符串

string #表示替换的字符串

flag #表示标志,取值g,i,c等

g #表示global,全部

i #表示ignore,忽略大小写

c #表示confirm,一个一个交互确认替换

count #表示从当前行到接下来的第几行,表示范围

+------------------------------------------------------------------------------+

  • 发表评论
  • 查看评论
【暂无评论!】

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。