vim快捷键笔记

vim快捷键


基本操作


单个字符移动


h: 向左移动

l: 向右移动

j: 向下移动

k: 向上移动

xh: 向左移动x个字符距离


单词移动


w: 将光标移动到下一个单词的开头

b: 将光标移动到前一个单词的开头

e: 将光标移动到下一个单词的词末

E: 移动到单词的结尾(忽略标点符号)

ge: 将光标移动到上一个单词的词末

2w: 指定移动的次数


行移动


$: 将光标移动到当前行的行尾

0: 将光标移动到当前行的行首

^: 将光标移动到当前行的第一个非空字符(行首和当前行非空字符不是一个位置)

2|: 移到当前行的第2列

fx: 将光标移动到当前行的第一个字符x上

3fx: 将光标移动到航前行的第3个字符x上

tx: 将光标移动到目标字符x的前一个字符上

fx和tx可以通过;和,进行重复移动,一个是正向重复,一个是反向重复%: 用于符号间的移动,它会在一对()、[]、{}之#间跳跃


文本块移动


(: 移到当前句子的开头

): 移到下一个句子的开头

{: 移到当前一段的开头

}: 移到下一段的开头

[[: 移到当前这一节的开头

]]: 移到下一节的开头


在屏幕中移动


xG: 跳转到指定的第x行,G移动到文件按末尾,``(2次单引号)返回到跳转前的位置

gg: 移动到文件开头

x%: 移动到文件中间,就使用50%

H: 移动到home

M: 移动到屏幕中间

L: 移动到一屏末尾

ctrl+G: 查看当前的位置状态


滚屏与跳转


半屏滚动ctrl+u/ctrl+d
全屏滚动ctrl+b/ctrl+f
z定位光标的位置
zz将光标置于屏幕的中间
zt将光标移动到屏幕的顶部
zb将光标移动到屏幕的底部

设置跳转标记mx,my,mz设置三个位置x,y,`z跳转到设置


文本插入操作


i在当前光标的前面插入字符
a在当前光标的后面追加字符
o在当前光标的下一行行首插入字符
I在一行的开头添加文本
A在一行的结尾处添加文本
O在光标当前行的上一行插入文本
s删除当前光标处的字符并进入到插入模式
S删除光标所在处的行,并进入到插入模式
u撤销修改

文本删除操作


x删除当前光标所在处的字符
X删除当前光标左边的字符
dw删除一个单词(从光标处到空格)
daw无论光标在什么位置,删除光标所在的整个单词(包括空白字符)
diw删除整个单词文本,但是保留空格字符不删除
d2w删除从当前光标开始处的2个单词
d$删除从光标到一行末尾的整个文本
d0删除从光标到一行开头的所有单词
dl删除当前光标处的字符
=xdh删除当前光标左边的字符
=X行删除
dd删除当前光标处的一整行
=D5dd删除从光标开始处的5行代码
dgg删除从光标到文本开头
dG删除从光标到文本结尾
J删除一个分行符,将当前行与下一行合并

文本复制、剪切与粘贴


y复制
p粘贴
yw复制一个单词
y2w复制2个单词
y$复制从当前光标到行结尾的所有单词
y0复制从当前光标到行首的所有单词
yy复制一整行
2yy复制从当前光标所在行开始的2行

复制文本块

1.首先进入visual模式: v

2.移动光标选择文本

3.复制与粘贴的操作


文本的修改与替换


cw删除从光标处到单词结尾的文本并进入到插入模式
cb删除从光标处到单词开头的文本并进入到插入模式
cc删除一整行并进入到插入模式
~:修改光标下字符的大小写
r替换当前光标下的字符
R进入到替换模式
xp交换光标和下一个字符

文本的查找与替换


/string正向查找
?string反向查找
set hls设置高亮显示
*按键将当前光标处的单词高亮显示,使用n浏览下一个查找高亮的结果:
s/old/new将当前行的第一个字符串old替换为new
s/old/new/g将当前行的所有字符串old替换为new
90s/old/new/g将指定行的所有字符串old替换为new
90,93s/old/new/g将指定范围的行的所有字符串old替换为new
%s/old/new/g将文本中所有的字符串old替换为new
%s/old/new/gc依次替换每个字符串关键字
%s/^struct/int/g将所有以struct开头的字符串替换为int

撤销修改、重做与保存


u撤销上一步的操作。
Ctrl+r将原来的插销重做一遍
U恢复一整行原来的面貌(文件打开时的文本状态)
q若文件没有修改,直接退出
q!文件已经被修改,放弃修改退出
wq文件已经被修改,保存修改并退出
e!放弃修改,重新回到文件打开时的状态

编辑多个文件


文件和缓冲区的区别文件是保存在磁盘上的,而打开的文件的文件是在内存中,在内存中有一个缓冲区,用来存放打开的文件。vim每次打开文件时都会创建一个缓冲区,vim支持打开多个文件

buffers查看缓冲区列表
**ls:buffer N根据缓冲区列表的编号跳转到指定缓冲区
bnext/bprev遍历缓冲区列表
bfirst/blast分别调到缓冲区列表的开头和结尾
write将缓冲区的修改保存到磁盘上
edit! e!放弃缓冲区的修改,恢复到文件打开时的状态
edit file编辑另一个文件
wnext保存当前缓冲区的修改并跳转到缓冲区列表中的下一个文件

标签页与折叠栏


tabedit file/tab split标签页的新建
tabn/tabp标签页的切换
gt/gT标签页的关闭
tabclose关闭当前的标签页
tabonly创建一个折叠
zf200G将光标和200行之间的代码折叠起来折叠的打开与关闭
za打开和关闭折叠
zr/zm一层一层地打开和关闭折叠
zR/zM分别打开和关闭所有的折叠折叠键的光标移动
zj跳转到下一个折叠处
zk跳转到上一个折叠处删除折叠
zd删除光标下的折叠
zD删除光标下的折叠以及嵌套的折叠
zE删除所有的折叠标签

​ 创建的折叠当退出vim之后就失效了。


多窗口操作


分割窗口


split/vsplitfilename窗口间跳转
ctrl+ww移动窗口
ctrl+wHJKL调整窗口尺寸
ctrl+w+/-调整窗口的高度
ctrl+w</>调整窗口的宽度
ctrl+w=所有的窗口设置相同的尺寸
resizen将当前窗口尺寸调整为N行关闭窗口
close关闭一个窗口
qall退出所有窗口
qall!放弃修改,退出所有窗口
wqall保存并退出所有窗口
wall保存所有窗口

编程辅助


基本跳转


gd: 跳转到局部变量的定义处;

gD: 跳转到全局变量的定义处,从当前文件开头开始搜索;

g;: 上一个修改过的地方;

g,: 下一个修改过的地方;

[[: 跳转到上一个函数块开始,需要有单独一行的{。

]]: 跳转到下一个函数块开始,需要有单独一行的{。

[]: 跳转到上一个函数块结束,需要有单独一行的}。

][: 跳转到下一个函数块结束,需要有单独一行的}。

[{: 跳转到当前块开始处;

]}: 跳转到当前块结束处;

[/: 跳转到当前注释块开始处;

]/: 跳转到当前注释块结束处;

%: 不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃。

下面的括号匹配对编程很实用的。

ci’, di’, yi’:修改、剪切或复制’之间的内容。

ca’, da’, ya’:修改、剪切或复制’之间的内容,包含’。

ci", di", yi":修改、剪切或复制"之间的内容。

ca", da", ya":修改、剪切或复制"之间的内容,包含"。

ci(, di(, yi(:修改、剪切或复制()之间的内容。

ca(, da(, ya(:修改、剪切或复制()之间的内容,包含()。

ci[, di[, yi[:修改、剪切或复制[]之间的内容。

ca[, da[, ya[:修改、剪切或复制[]之间的内容,包含[]。

ci{, di{, yi{:修改、剪切或复制{}之间的内容。

ca{, da{, ya{:修改、剪切或复制{}之间的内容,包含{}。

ci<, di<, yi<:修改、剪切或复制<>之间的内容。

ca<, da<, ya<:修改、剪切或复制<>之间的内容,包含<>。


ctags


ctags -R: 生成tag文件,-R表示也为子目录中的文件生成tags

:set tags=path/tags – 告诉ctags使用哪个tag文件

:tag xyz – 跳到xyz的定义处,或者将光标放在xyz上按C-],返回用C-t

:stag xyz – 用分割的窗口显示xyz的定义,或者C-w ], 如果用C-w n ],就会打开一个n行高的窗口

:ptag xyz – 在预览窗口中打开xyz的定义,热键是C-w }。

:pclose – 关闭预览窗口。热键是C-w z。

:pedit abc.h – 在预览窗口中编辑abc.h

:psearch abc – 搜索当前文件和当前文件include的文件,显示包含abc的行。

有时一个tag可能有多个匹配,如函数重载,一个函数名就会有多个匹配。 这种情况会先跳转到第一个匹配处。

:[n]tnext – 下一[n]个匹配。

:[n]tprev – 上一[n]个匹配。

:tfirst – 第一个匹配

:tlast – 最后一个匹配

:tselect tagname – 打开选择列表

tab键补齐

:tag xyz – 补齐以xyz开头的tag名,继续按tab键,会显示其他的。

:tag /xyz – 会用名字中含有xyz的tag名补全。


cscope


cscope -Rbq: 生成cscope.out文件

:cs add /path/to/cscope.out /your/work/dir

:cs find c func – 查找func在哪些地方被调用

:cw – 打开quickfix窗口查看结果


gtags


Gtags综合了ctags和cscope的功能。 使用Gtags之前,你需要安装GNU Gtags。 然后在工程目录运行 gtags

:Gtags funcname 定位到 funcname 的定义处。

:Gtags -r funcname 查询 funcname被引用的地方。

:Gtags -s symbol 定位 symbol 出现的地方。

:Gtags -g string Goto string 出现的地方。 :Gtags -gi string 忽略大小写。

:Gtags -f filename 显示 filename 中的函数列表。 你可以用 :Gtags -f % 显示当前文件。

:Gtags -P pattern 显示路径中包含特定模式的文件。 如 :Gtags -P .h$ 显示所有头文件, :Gtags -P /vm/ 显示vm目录下的文件。


make


vim提供了:make来编译程序,默认调用的是make, 如果你当前目录下有makefile,简单地:make即可。

如果你没有make程序,你可以通过配置makeprg选项来更改make调用的程序。 如果你只有一个abc.java文件,你可以这样设置:

set makeprg=javac\ abc.java

然后:make即可。如果程序有错,可以通过quickfix窗口查看错误。 不过如果要正确定位错误,需要设置好errorformat,让vim识别错误信息。 如:

:setl efm=%A%f:%l:\ %m,%-Z%p^,%-C%.%#

%f表示文件名,%l表示行号, %m表示错误信息,其它的还不能理解。 请参考 :help errorformat。


快速修改窗口


其实是quickfix插件提供的功能, 对编译调试程序非常有用 😃

:copen – 打开快速修改窗口。

:cclose – 关闭快速修改窗口。

快速修改窗口在make程序时非常有用,当make之后:

:cl – 在快速修改窗口中列出错误。

:cn – 定位到下一个错误。

:cp – 定位到上一个错误。

:cr – 定位到第一个错误。


自动补全


C-x C-s – 拼写建议。

C-x C-v – 补全vim选项和命令。

C-x C-l – 整行补全。

C-x C-f – 自动补全文件路径。弹出菜单后,按C-f循环选择,当然也可以按 C-n和C-p。

C-x C-p 和C-x C-n – 用文档中出现过的单词补全当前的词。 直接按C-p和C-n也可以。

C-x C-o – 编程时可以补全关键字和函数名啊。

C-x C-i – 根据头文件内关键字补全。

C-x C-d – 补全宏定义。

C-x C-n – 按缓冲区中出现过的关键字补全。 直接按C-n或C-p即可。

当弹出补全菜单后:

C-p 向前切换成员;

C-n 向后切换成员;

C-e 退出下拉菜单,并退回到原来录入的文字;

C-y 退出下拉菜单,并接受当前选项。


多行缩进缩出


正常模式下,按两下>;光标所在行会缩进。

如果先按了n,再按两下>;,光标以下的n行会缩进。

对应的,按两下<;,光标所在行会缩出。

如果在编辑代码文件,可以用=进行调整。

在可视模式下,选择要调整的代码块,按=,代码会按书写规则缩排好。

或者n =,调整n行代码的缩排。


折叠


zf – 创建折叠的命令,可以在一个可视区域上使用该命令;

zd – 删除当前行的折叠;

zD – 删除当前行的折叠;

zfap – 折叠光标所在的段;

zo – 打开折叠的文本;

zc – 收起折叠;

za – 打开/关闭当前折叠;

zr – 打开嵌套的折行;

zm – 收起嵌套的折行;

zR (zO) – 打开所有折行;

zM (zC) – 收起所有折行;

zj – 跳到下一个折叠处;

zk – 跳到上一个折叠处;

zi – enable/disable fold;


命令行

normal模式下按:进入命令行模式


命令行模式下的快捷键:


上下方向键:上一条或者下一条命令。如果已经输入了部分命令,则找上一 条或者下一条匹配的命令。

左右方向键:左/右移一个字符。

C-w: 向前删除一个单词。

C-h: 向前删除一个字符,等同于Backspace。

C-u: 从当前位置移动到命令行开头。

C-b: 移动到命令行开头。

C-e: 移动到命令行末尾。

Shift-Left: 左移一个单词。

Shift-Right: 右移一个单词。

@: 重复上一次的冒号命令。

q: 正常模式下,q然后按’:',打开命令行历史缓冲区, 可以像编辑文件一样编辑命令。

q/和q? 可以打开查找历史记录。


执行外部命令


:! cmd 执行外部命令。

:!! 执行上一次的外部命令。

:sh 调用shell,用exit返回vim。

:r !cmd 将命令的返回结果插入文件当前位置。

:m,nw !cmd 将文件的m行到n行之间的内容做为命令输入执行命令。


其它


工作目录


:pwd 显示vim的工作目录。

:cd path 改变vim的工作目录。

:set autochdir 可以让vim 根据编辑的文件自动切换工作目录。

K: 打开光标所在词的manpage。

*: 向下搜索光标所在词。

g*: 同上,但部分符合即可。

#: 向上搜索光标所在词。

g#: 同上,但部分符合即可。

g C-g: 统计全文或统计部分的字数。


在线帮助:


h(elp)或F1 打开总的帮助。

:help user-manual 打开用户手册。

命令帮助的格式为:第一行指明怎么使用那个命令; 然后是缩进的一段解释这个命令的作用,然后是进一步的信息。

:helptags somepath 为somepath中的文档生成索引。

:helpgrep 可以搜索整个帮助文档,匹配的列表显示在quickfix窗口中。

Ctrl+] 跳转到tag主题,Ctrl+t 跳回。

:ver 显示版本信息。


一些小功能


简单计算器: 在插入模式下,输入C-r =,然后输入表达式,就能在 光标处得到计算结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值