移动
0 |
光标移动到本行行首 |
$ |
光标移动到本行行尾 |
gg |
移动到全文首行 |
G |
移动到全文尾行 |
ngg |
移动到第n行 |
n+ |
向移动n行 |
n- |
向移动n行 |
ctrl + u |
向上翻半屏 |
ctrl + d |
向下翻半屏 |
ctrl +b |
向上翻一屏 |
ctrl + f |
向下翻一屏 |
ctrl + e | 光标不动,向下移动一点屏幕
ctrl + y | 光标不动,向上移动一点屏幕
H | 光标移动屏幕的顶端
M | 光标移动到屏幕的中间
L | 光标移动到屏幕的底端
w |
光标移到下一个word |
b |
光标移到上一个word |
’’ |
移动到光标上次停靠的地方, 是两个’, 而不是一个” |
ctrl + o |
回到上一次光标处 |
ctrl + i |
进到下一次光标处 |
[[ |
跳转到代码块的开头去,但要求代码块中’{‘必须单独占一行 |
搜索
/ |
后面跟要查找的东西,在文件中向下搜索 |
? |
后面跟要查找的东西,在文件中向上搜索 |
n |
向前重复搜索 |
N |
向后重复搜索 |
* |
移动当前光标所指的单词下一次出现的地方,相当于搜索 |
# |
移动当前光标所指的单词上一次出现的地方 |
ma |
标记。a是我们对这一行所做的标记的名称 |
‘a |
快速的移到刚才所做标记的地方 |
:marks |
列出当前的所有的标记。 |
d‘a |
删掉这一标记 |
复制、粘贴
yy |
复制光标当前行 |
nyy |
复制光标当前行到当前行以下的n-1行 |
:1,100 co 200 |
将1~100的内容复制到第200行。 |
:100,102 co $ |
将100~102行的内容复制到最后一行。 |
p |
粘贴到当前行的下一行 |
P |
粘贴到当前行的 上一行 |
]p |
和 p 的功能差不多,但是它会自动调整被粘贴的文本的缩进去适应当前代码的位置 |
ctrl + r ctrl + w |
将光标的单词复制到vim的命令行模式 |
替换
:1,$s/^/some string /g |
在文件的第一行至最后一行的行首插入“some string”。 |
:%s/$/some string/g |
在整个文件每一行的行尾添加“some string”。 |
:%s/string1/string2/g |
在整个文件中替换“string1”成“string2”。 |
:3,7s/string1/string2/ |
仅替换文件中的第3行到第7行中的“string1”成“string2” |
选择
v |
选择复制 |
vaw |
选择一个单词 |
vas |
选择一个句子 |
vap |
选择一个断落 |
ci'、ci"、ci(、ci[、ci{、ci<- | 分别更改这些配对标点符号中的文本内容
di'、di"、di(或dib、di[、di{或diB、di- | 分别删除这些配对标点符号中的文本内容
yi'、yi"、yi(、yi[、yi{、yi<- | 分别复制这些配对标点符号中的文本内容
vi'、vi"、vi(、vi[、vi{、vi<- | 分别选中这些配对标点符号中的文本内容
上面的i改成a可以连配对标点一起操作
删除
dd |
删除当前行 |
ndd |
与nyy相似 |
dw |
删除一个单词 |
ndw |
删除n个单词 |
x |
删除一个字符 |
nx |
删除n个字符 |
dG |
删除当前光标到文件末尾的所有内容。 |
d0 |
删除当前光标到本行行首的所有内容 |
d$ |
删除当前光标到本行行尾的所有内容 |
ddp |
上下两行调换 |
:1,100d |
删除1~100 |
:100d |
删除第100行 |
:1,100 mo $ |
将1~100行的内容移动到最后一行。 |
:g/^\s*$/d |
将所有不包含字符(空格也不包含)的空行删除 |
ctrl + h |
插入模式下, 回删一个字符 |
ctrl + w |
插入模式下, 回删一个单词 |
代码格式
== |
当前行自动缩进对齐,自动格式化 |
n== |
自动缩进光标下n行 |
gg=G |
当前文件所有行自动缩进对齐 |
光标放在{处,然后输入v%就可以把大括号中内容选定,然后按=就可以按照排C语言格式缩
提示、注释
ctrl + g |
在最后一行中显示光标所在位置的行数及文章的总行数 |
:1,20s/^/\/\//g |
注释1到20行 |
:%s/New_//gc |
替换,且询问是否替换 |
插入模式
i |
在当前位置的字符前面进入插入模式 |
I |
在当前行的开头进行插入 |
a |
在当前位置的字符后面进入插入模式 |
A |
在当前行的结尾进行插入 |
o |
在当前行下面打开一个新行进行插入 |
O |
在当前行上面打开一个新行进行插入 |
J |
合并光标所在行及下一行为一行(依然在命令模式) |
撤销
u |
撤销上一次的更改 |
U |
取消对行所作的所有改变 |
ctrl + r |
撤销你的撤销(相当于window下的ctr+y) |
. |
这个命令是用来重复上一命令的 |
奇葩
ggguG |
把整个文章全部小写 |
大写 |
在v模式下 选中单词 U |
:nohl |
取消高亮 |
ctrl + ] |
就可以定位到函数的定义位置: |
ctrl + t/o |
退回原来的地方; |
ctrl + n, ctrl + p |
弹出智能提示的菜单 |
ctrl + e |
退出提示,并取消选择 |
ctrl + y |
退出提示 并接收当前选择 |
gd |
到达光标所在处函数或者变量的定义处(gD 全局搜索) |
find ~/qualitytesttrunk/ /usr/local/srvframework2/ | grep -v svn | xargs ctags
命令行操作
分屏
:sp filename |
在当前窗口上面新开一个窗口文件名为filename |
:vsp filename |
在当前窗口左右开一个 |
ctrl + wk |
光标移动到上边,依此递推h j k l |
ctrl + w + w |
顺序切换到下一个 |
:tabnew |
新建标签页 |
:tabf test* |
在新tab中打开搜索到的文件//有点类似于上面 |
:tabs |
显示已打开标签页的列表 |
:tabc |
关闭当前标签页。 |
:tabo |
将关闭所有的标签页。 |
:tabp或gT |
移动到上一个标签页 |
:tabn或gt |
移动到下一个标签页。 |
:tabdo |
同时在多个标签页中执行命令。比如我们打开了多个标签页,需要把这些文件中的“food”都替换成“drink”,那么就可以使用:tabdo %s/food/drink/g命令,一次完成对所有文件的替换操作,而不用针对每个文件重复操作。 |
ctrl w -/+ |
调整分屏高度 |
ctrl w </> |
调整分屏宽度 |
打开vim
vim -p OidbCmlb.h log.h |
tab打开多个文件 |
gf |
打开当前光标所在文件 |
vim log.h +45 |
45行打开 |
常用命令
#vim可以鼠标滑动粘贴,在.vimrc中添加下面语句
if has('mouse')
set mouse=a
endif
:inoremap jk <esc>
gotags -f="tags" -R *
其他
如果文章对您有帮助,欢迎扫描下方二维码赞助(一分也是爱噢),谢谢