vim命令汇总
文章首发:http://www.cnblogs.com/sprying/p/3864631.html
上一次学习vim还是快一年了,倒腾了一个月之后就没碰过。现在重新汇总下vim命令。
1、有些命令回车后才有效果
2、vim编辑有三个状态:Normal、Insert、Visual
打开文件
Normal模式下
:e
:vi
保存关闭文件
-
:w
-
:q
-
:wq
ZZ
保存和退出 -
:q!
放弃修改并退出 -
:qa!
强制退出所有打开的文件 -
:close
-
:close[!]
最后一个窗口不关闭 -
:hide
最后一个窗口不关闭,可以关闭当前屏幕窗口。 -
:on[ly][!]
除了当前窗口所有其他窗口都关闭。
缓存操作
:ls
显示缓存:b [filename]
打开缓存文件:bn
(n a number) move to nth buffer 打开指定数字的缓存:bp
previous buffer 打开上一个缓存:bn
next buffer 打开下一个缓存
移动光标
w
下一个词的首字母W
下一个词(跳过标点)b
当前词的首字母B
前一个词(跳过标点)e
当前词的尾端E
当前词的尾端(跳过标点)
注意: w
e
是以字母、数字、_
组成的为单词, 若要以blank空格符,用大写
-
h
左移一字符 -
l
右移一字符 -
j
下移一行 -
k
上移一行 -
gd
调到光标所在词定义位子go define -
gg
到文档顶部 -
G
到文档底部 -
xgg
xG
:x
到第x行(x是行号) -
10%
移动到文件大约10%的行位置 -
Ctrl + d
下翻半屏 -
Ctrl + u
上翻半屏 -
Ctrl + f
下翻一屏 -
Ctrl + b
上翻一屏 -
Ctrl + g
查看文件url、行数信息 -
H
命令移动光标到视野内的第一行, -
M
移动到视野内的中部, -
L
移动光标到视野内的最后一行。
移动屏幕
光标所在的行位不变
-
Ctrl + e
上滚一行 -
Ctrl + y
下滚一行 -
zt
命令将光标所在行移动到屏幕的顶部, -
zz
命令将光标所在行移动到屏幕的中部, -
zb
将光标移动到屏幕的底部。 -
nz
回车,将第n行滚动至屏幕顶部
插入
i
光标位置前插入I
行首字符前插入a
光标位置后插入A
本行末尾插入o
向下插入一行O
向上插入一行
删除
-
x
dl
光标下的字符 -
X
dh
删除光标前字符 -
dw
删除当前光标下的词,由光标位置起,不包括光标位字符 -
db
de
-
dnl
向右删除n个字母 -
dnh
向左删除n个字母 -
d$
D
删除光标到行尾 -
dd
删除当前行 -
dnj
向下删除n行 -
dnk
向上删除n行 -
dG
从当前光标位置一直删除到文件的末尾 -
dgg
从当前光标位置一直删除到文件的开始 -
6dw
删除6个word -
diw
删除光标上的单词(不包括空格) -
daw
删除光标上的单词(包括空格) -
df
从当前光标位置上的字符一直删除到指定的字符(包括指定字符) -
dt
从当前光标位置删除到指定字符的前一个字符 -
J
删除换行符,合并两行 -
%s/\s\+$//
删除全文行尾空格,%表示作用于整个文件,//表示替换的是空白 -
%s/^\s\+//
删除全文行首空格
撤销和重做
u
撤销U
ctrl + r
恢复撤销
自动提示
在Insert模式下,输入字符,Ctrl p
或Ctrl n
代码提示
修改
cl
(s
) ch
c3w
cb
ciw
caw
df
dt
cc
(S
) c$
(C
) cG
复制粘贴
yy
Y
复制当前行yw
复制当前光标下的词yG
拷贝到文件的末尾ygg
拷贝到文件的开头0y$
y2/foo
拷贝2个foo之间的字符串p
粘贴P
粘贴在当前位置之前Go
替换
预定义类 | 含义 |
---|---|
:s/old/new |
将当前行中查找到第一个字符”old”串替换为”new” |
:s/old/new/g |
将当前行中查找到的所有字符串”old”替换为”new” |
:#,#s/old/new/g |
在行号”#,#”范围内替换所有的字符串”old”为“new” |
:%s/old/new/g |
在整个文件范围内替换所有的字符串”old“为”new” |
:s/old/new/c |
在替换命令末尾加入c命令,将对每个替换动作提示用户进行确认 |
-
r
输入字符替换光标下的字符,然后返回Normal模式, 如果光标选中一段字符,输入的一个字符会替换选择。 -
nr
输入字符会替换光标起的n个字符 -
R
会一直替换,按delete还原。 如果选中几个字符,则会进入visual模式,删除当前行,进入Insert模式。 -
:s/p1/p2/g
当前行中所有p1均用p2替代 -
:n1,n2s/p1/p2/g
将第n1至n2行中所有p1均用p2替代 -
g/p1/s//p2/g
将文件中所有p1均用p2替换
搜索
-
/XXXX
搜索xxxx,可以用n下一个,N上一个,2n下第二个 -
/di
可查找到media -
/^di
只匹配行首 -
/di$
只匹配行未 -
/^di$
仅仅匹配包括di的行并不带空格 -
/d.i
匹配第一个字符是d,第二个字符任意,第三个是i的字符串 -
/di\.
匹配带特殊字符.的字符串di. -
#
向前搜索光标当前所在的字,向后查找当前光标的第2个单词,可以输入”2#“ -
*
向后搜索光标当前所在的字 -
fa
查找当前行光标所在位置的下一个f(ind) a,这里f可用t -
Fa
查找当前行光标所在位置的上一个a
标记和宏(macro)
-
ma
将当前位置标记为a,26个字母都可以作为标记,mb
、mc
等等 -
‘a
跳转到a标记的位置 -
qa
将之后的操作都记录下来,直到继续按q -
@a
执行刚刚记录在a里面的键盘操作 -
@@
执行上一次的macro操作Ctrl a 数字加1 qaYp<C-a>q 1. qa开始录制 2. Yp 复制行. 3. \<C-a\> 增加1. 4. q 停止录制. 5. @a → 在1下面写下 2 6. @@ → 在2 正面写下3 现在做100@@ 会创建新的100行,并把数据增加到 103.
高效编辑
-
di*
光标在""
之前或之中,则删除""
之间的内容 -
yi{
光标在{}
之前或之中,则复制{}
之间的内容 -
vi[
光标在[]
之前或之中,则选中[]
之间的内容i
代表inner
,可编辑的光标有'
、"
、()
、[]
、{}
、<>
,i
可替换成a
,就连配符号一起操作 -
dtx
删除字符直到遇见光标之后的第一个x字符 -
ytx
复制字符直到遇见光标之后的第一个x字符 -
:n1,n2 co n3
将n1行到n2行之间的内容拷贝到第n3行下 -
:n1,n2 m n3
将n1行到n2行之间的内容移至到第n3行下 -
:n1,n2 d
将n1行到n2行之间的内容删除 -
:n1,n2 w!command
将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入 -
:r!command
将命令command的输出结果放到当前行 -
5w
相当于按五次w键; -
6j
下移6行,相当于按六次j; -
3J
大写J,本来是将下一行与当前行合并,加上数量,就是重复操作3次; -
6dw
d6w
结果是一样,就是删除6个word;
剩下的无数情况,自己类推吧
显示页码
:set nu
:set nonu
其它
~
修改选中的字符的大小写,原来大写的转换成小写,原来小写的转成大写。在Visual模式和Normal模式下都能生效。 注意,只有tiledeop设置后,这个才能成为一个操作命令,才可用该命令与其他光标移动的命令组合使用。g
~ 修改选中的字符的大小写操作命令,原来大写的转换成小写,原来小写的转成大写。gu
修改选中的字符为小写操作命令。gU
修改选中的字符为大写操作命令。!
过滤警告操作命令gq
选中文本格式化,文本拼接组合成句子或段落命令。在Normal模式和Visual模式下都能生效。>
选中文本向右Tab缩进。在Normal模式和Visual模式下都能生效。<
选中文本向左Tab缩进。在Normal模式和Visual模式下都能生效。=
操作:选中文本自动缩进。 按v进入visual状态,选择多行,用>或<缩进或缩出
*******站在巨人的肩膀上