(无插件) vim 基础快捷键汇总

先上两张图,再给文字说明。第一张,综合图。在这里插入图片描述
光标移动说明图:
​​在这里插入图片描述

快捷键默认为Normal模式,即按<ESC>后的状态。<c-*>代表Ctrl+*

1. 查看

1.1 基础移动

按键作用
h/j/k/l左,下,上,右
w/e/b下一个词的词首 / 下一个词的词尾 / 上一个词的词首
W/E/B(以空格为分隔)下一个词的词首 / 下一个词的词尾 / 上一个词的词首
</>visual 模式 选中后进行缩进

1.2 翻屏、跳转

按键作用
%在成对的{}/[]/()之间跳转
H/M/L跳转到当前屏幕的顶部、中部、底部
#L跳转到当前屏的第#行
zt/zz/zb当前编辑行置为屏顶/屏中/屏底
gg/G跳转到文件的开头/底部
(/)跳转到当前的行首、行尾
{/}向上、向下跳转到最近的空行
[{/}]跳转到目前区块开头、结尾
0/$/^跳转到行首/本行第一个非空白字符/行尾#$可跳到本行后第#号行的行尾
:#/#G跳到第#行
<c-b> / <c-f>前/后一页,第一个组合按键为Ctrl+b
<c-u> /<c-d>前/后半页
<c-e>/下/上滚一行

1.3 选择

按键作用
V选择一行
<c-v>矩形选择
v3w从光标起选择三个字符,其中v代表从Normal模式进入Visual模式

2. 编辑

2.1 新增

按键作用
i/I光标前/当前行首插入
a/A光标后/当前行尾插入
o/O当前行后/当前行前插入
:r filename在当前位置插入filename内容
:r! command在当前位置插入在shell执行command的结果,如:r! date在当前位置插入时间

2.2 修改 c(change)

按键作用
r/R修改光标下字符/修改光标所到之处的字符(相当于按了Insert键)
cw/c#w/C更改光标所在处的字到字尾处 / 修改#个字符 / 修改到行尾
ci'/ di'/yi'/vi'修改/删除/复制/选中`配对标点符号中的文本内容
s/#S删除当前光标处字符 / 删除 # 行,然后进入Insert 模式

2.3 删除 d(delete)

按键作用
#x/#X剪切光标右边/左边n个字符,相当于d[n]l/d#h
D/d$/d^删除到行尾/行尾/行首
dw/daw/d#w删除光标处单词结束/光标处单词结束(含单词后空格)/删除#个单词
#dd删除光标所在行起#行
diB/daB删除{}中的内容 / 删除{}及其内的内容
:m,n dm-n行之间的内容剪切到粘贴板
dgg/dG剪切光标以上/下所有行

2.4 查找 f(ind)

按键作用
f‘n’/F'n'跳转到光标后第一个/上一个字符’n’ (配合;/,,正向/反向重复查找)
t‘n’/T'n'跳转到光标后第一个/上一个字符’n’之前 (配合;/,,正向/反向重复查找)
//?/搜索关键字,之后可匹配n/N/找下一个关键字
*/#以光标所在位置的单词为关键字,向/搜索下一个关键字

2.5 复制 y(yank)

按键作用
yw/#yw复制到当前词尾 / 复制光标起#个词
Y/yy/#yy复制当前行 / 复制当前行 / 从当前行起复制#行
p粘贴
:m,ny复制当前文件m-n行的内容
ygg/yG复制光标以上/下所有行
yaw/yas复制一个词和复制一个句子,即使光标不在词首和句首也没关系,其中a代表around

2.6 替换 r(place)

语法 {范围}s/{匹配模式}/{目标字符串}/{选项}

  • 范围:指生效范围
    • %:代表整个文件
    • n1,n2:代表只在n1到n2行之间生效
    • .:当前行,{范围}为空时使用此情况
    • 0: 最开始一行(可能是这样)。
    • $: 最后一行
  • s:指substitue,替换
  • 匹配模式:可为字符串正则表达式
  • 目标字符串:要替换为的字符串
  • 选项
    • 常用项g/c/n,分别代表全局/替换要确定/(不替换)只统计匹配次数
    • 为空,则只替换第一个匹配到的项

2.7 大小写转换 u(ppercase)

按键作用
~大小写转换
u/UVisual模式下,将选中的字符变为小写/大写
g[u|U]{范围}范围内的字符改为小写/大写,见表格后

g[u|U]{范围}示例:

  • gUU/guu:将当前行的字母改为大写 /小写
  • gUw/guw:将当前光标下的单词改为大写 /小写
  • gU$/gu$:将到行尾的词改为大写 /小写

2.8 撤消与重做(normal模式)

按键作用
[#]u取消#个改动
:undo 5撤销5个改变
:undolist你的撤销历史
<c-r>重做最后的改动
U取消当前行中所有的改动
:earlier 4m回到4分钟前
:later 55s前进55秒

3. 编程辅助

3.1 基本按键

按键作用
gd/gD跳转到局部/全局变量的定义处,搜索全局变量时从当前文件开头开始搜索
K在新窗口中显示当前光标所在函数的帮助文档
g;/g,上一个/下一个修改过的地方
[[/[]跳转到上一个函数块开始/结束,需要有单独一行的{
]]/][跳转到下一个函数块开始/结束,需要有单独一行的{
[{/]}跳转到当前块开始/结束
[//]/跳转到当前注释块开始/结束
%不仅能移动到匹配的(),{}或[]上,而且能在#if,#else, #endif之间跳跃

3.2 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可能有多个匹配,如函数重载,一个函数名就会有多个匹配。 这种情况会先跳转到第一个匹配处。

按键作用
:[#]tnext下一[#]个匹配。
:[#]tprev上一[#]个匹配。
:tfirst第一个匹配
:tlast最后一个匹配
:tselect tagname打开选择列表

tab键补齐

按键作用
:tag xyz<tab>补齐以xyz开头的tag名,继续按tab键,会显示其他的
:tag /xyz<tab>会用名字中含有xyz的tag名补全

3.3 cscope

cscope -Rbq: 生成cscope.out文件

按键作用
:cs add {/path/to/cscope.out} {/your/work/dir}
:cs find c {func}查找函数func在哪些地方被调用
:cw打开quickfix窗口查看结果

3.4 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目录下的文件。

3.5 编译

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

3.6 快速修改窗口

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

按键作用
:copen打开快速修改窗口
:cclose关闭快速修改窗口

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

按键作用
:cl在快速修改窗口中列出错误
:cn定位到下一个错误
:cp定位到上一个错误
:cr定位到第一个错误

3.7 自动补全

按键作用
<c-x> <c-s>拼写建议
<c-x> <c-v>补全vim选项和命令
<c-x> <c-l>整行补全
<c-x> <c-f>自动补全文件路径。弹出菜单后,按C-f循环选择,当然也可以按<c-p><c-n>
<c-x> <c-p>/<c-x> <c-n>用文档中出现过的单词补全当前的词。 直接按<c-p><c-n>也可以
<c-x> <c-o>编程时可以补全关键字和函数名,需要安装vim插件
<c-x> <c-i>根据头文件内关键字补全
<c-x> <c-d>补全宏定义

当弹出补全菜单后:

按键作用
<c-p> /<c-n>向前/向后切换成员
C-e退出下拉菜单,并退回到原来录入的文字
C-y退出下拉菜单,并接受当前选项

3.8 多行缩进缩出

Normal模式下,按两下>,光标所在行会缩进。
如果先按了数学n,再按两下>,光标以下的n行会缩进。
对应的,按两下<,光标所在行会缩出。

Visual模式下,选择要调整的代码块,按=,代码会按书写规则缩排好。
或者n =,调整n行代码格式。

3.9 折叠

按键作用
zf/a/p创建折叠的命令,可以在一个可视区域上使用该命令
zd/zD删除当前行的折叠
zfap折叠光标所在的段
zo打开折叠的文本
zc收起折叠
za打开/关闭当前折叠
zr打开嵌套的折行
zm收起嵌套的折行
zR/zO打开所有折行
zM /zC收起所有折行
zj/zk跳到下/上一个折叠处
zi开启/关闭折叠功能

4. vim通用高级编辑功能

4.1 文本块

汇总文本块用法
a代表aroundi代表in

按键作用
aw/iw一个词(含/不含左右符号)
as/is一句,以空格分隔(含/不含左右空格)
ap一段,以空行分隔
ab一块(包含在圆括号中的)

y/d/c/v都可以跟文本对象组合使用

例如:
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<:修改、剪切或复制<>之间的内容,包含<>。

4.2 书签(bookmark)、标记

按键作用
m{a-z}标记光标所在位置,局部标记,只用于当前文件,可以有26个标记位置
m{A-Z}标记光标所在位置,全局标记。标记之后,退出Vim, 重新启动,标记仍然有效
`{a-z}移动到标记位置
'{a-z}移动到标记行的行首
``在当前编辑位置与上次编辑位置之间来回跳转
<c-i>/<c-o>跳到历史位置/更新位置,可无限回溯
:marks显示所有标记
:delmarks a c-f/:delmarks!删除标记a、c、d、e、f / 删除所有标记

4.3 寄存器 register

寄存操作以"开头,在Normal模式下,以"{寄存器名}{操作}的格式使用寄存器。
寄存器可用于保存代码片断。

寄存器说明作用
a-z都可以用作寄存器名。"ayy把当前行的内容放入a寄存器
A-Z用大写字母索引寄存器,可以在寄存器中追加内容。 如"Ayy把当前行的内容追加到a寄存器中
:reg显示所有寄存器的内容
""不加寄存器索引时,默认使用的寄存器
"*当前选择缓冲区,"*yy把当前行的内容放入当前选择缓冲区
"+系统剪贴板。"+yy把当前行的内容放入系统剪贴板

4.4 宏 macro

按键作用
.Normal模式下,重复上一个编辑动作
q{a-z}开始录制宏,编号为字母a-z之一
q停止录制
@{a-z}播放编号为{a-z}

5. 多文件操作

5.1 多文件基本操作

vi a.txt b.txt c.txt

多文件操作多在命令模式下使用

命令作用
:#n[ext]编辑下#个文件
:previous/:N编辑上一个文件
:wnext保存当前文件,并编辑下一个文件
:wprevious保存当前文件,并编辑上一个文件
:args显示文件列表
:n filenames/:args filenames指定新的文件列表
vi -o filenames在水平分割的多个窗口中编辑多个文件(vim外的shell命令行中)
vi -O filenames在垂直分割的多个窗口中编辑多个文件(vim外的shell命令行中)
:wq filename将编辑内容保存到文件filename,并退出
:e/:e!/:e filename重载当前文件/ 重载当前文件并放弃修改 / 打开文件filename
:f filename/:saveas filename另存为filename
e#/<c-^>回到上一个编辑的文件
:f/<c-g>在状态栏显示当前文件名

5.2 多标签操作(很少用)

命令作用
vim -p files打开多个文件,每个文件占用一个标签页
:tabe/tabnew如果加文件名,就在新的标签中打开这个文件, 否则打开一个空缓冲区
:tabn/Control + PageDown切换到下一个标签
:tabp/Control + PageUp切换到上一个标签
[#]gt切换到下一个标签。如果前面加了 #, 就切换到第#个标签。序号起始为1
:tab split将当前缓冲区的内容在新页签中打开
:tabc[lose]关闭当前的标签页
:tabo[nly]关闭其它的标签页
:tabs列出所有的标签页和它们包含的窗口
:tabm[ove] [N]移动标签页,移动到第N个标签页之后。 如 tabm 0 当前标签页,就会变成第一个标签页

5.3 缓冲区

一个缓冲区保存一个打开的文件

命令作用
:buffers/:ls/:files显示缓冲区列表
ctrl+^在最近两个缓冲区间切换
:bn下一个缓冲区
:bp上一个缓冲区
:bl最后一个缓冲区
:b[n]/:[n]b切换到第n个缓冲区
:nbw[ipeout]彻底删除第n个缓冲区
:nbd[elete]删除第n个缓冲区,并未真正删除,还在unlisted列表中
:ba[ll]把所有的缓冲区在当前页中打开,每个缓冲区占一个窗口

6. 窗口操作

命令作用
vim -o file1 file2水平分割窗口,同时打开file1和file2
vim -O file1 file2垂直分割窗口,同时打开file1和file2

6.1 水平分割

命令作用
:sp[lit]/<c-w> s/ <c-w> <c-s>把当前窗水平分割成两个窗口。注意,<c-s>可能会冻结终端,请按<c-q>继续
:sp[lit] filename水平分割窗口,并在新窗口中显示另一个文件
:[#]sp[lit]水平分割出一个#行高的窗口
:[#]new/<c-w> n/<c-w> <c-n>水平分割出一个#行高的窗口,并编辑一个新文件。
ctrl+w f水平分割出一个窗口,并在新窗口打开名称为光标所在词的文件

6.2 垂直分割

命令作用
:vs[plit]/ v/<c-w> <c-v>把当前窗口分割成水平分布的两个窗口
:[#]vne[w]垂直分割出一个高度为#的新窗口
:vertical水平分割的命令: 相应的垂直分割

6.3 关闭子窗口

命令作用
:wq/ZZ/:x将编辑内容保存,并退出,w(write)写,q(uit)退出,
q!!强制操作(如q!代表不保存退出)
:qall关闭所有窗口,退出vim
:wall保存所有修改过的窗口,即write all
:only/<c-w> o只保留当前窗口,关闭其它窗口。(CTRL-W o)
<c-w>q/:q/:close/<c-w> c关闭当前窗口,不保存

6.4 调整窗口大小

命令作用
<c-w> +/<c-w> -当前窗口增高/降低一行。也可以用n增高n行
<c-w> _/ctrl+w |当前窗口扩展到尽可能的大/当前窗口扩展到尽可能的宽,相像_/|分别代表行/列
<c-w> #/:resize n/n <c-w> _设置窗口为#行高
<c-w> =所有窗口同样高度
[#]<c-w> </[#]<c-w> >当前窗口减少/增加 #

6.5 切换和移动窗口

命令作用
<c-w> w/<c-w> <c-w>切换到下一个窗口
<c-w> p切换到前一个窗口
<c-w> h/l/j/k切换到左/右/下/上的窗口
<c-w> t/b切换到最上/最下面的窗口
<c-w> H/L/K/J将当前窗口移动到最左/右/上/下
<c-w> r旋转窗口的位置
<c-w> T将当前的窗口移动到新的标签页上

6.6 调整字体

命令作用
<c-->/<c-=>字体调/
<c-0>恢复默认字体大小

7. 命令行

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

7.1 命令行模式下的快捷键

命令作用
上下方向键上一条或者下一条命令。如果已经输入了部分命令,则找上一 条或者下一条匹配的命令
左右方向键左/右移一个字符
<c-w>/<c-h>向前删除一个单词/字符,后者等同于Backspace
<c-u>从当前位置移动到命令行开头
<c-b>/<c-e>移动到命令行开头/结尾
Shift-Left>/Shift-Right>左/右移一个单词
@:重复上一次的冒号命令
q:正常模式下,q然后按’:’,打开命令行历史缓冲区, 可以像编辑文件一样编辑命令
q//q?可以打开查找历史记录

7.2 执行外部命令

命令作用
:!{command}执行外部命令command
:!!执行上一次的外部命令
:sh {bash-file}从shell调用{bash-file},用exit返回vim
:r !cmd将命令的返回结果插入文件当前位置,如r! echo %返回当前文件名
:m,nw !cmd将文件的m行到n行之间的内容做为命令输入执行命令

8. 其它

8.1 工作目录

命令作用
:pwd显示vim的工作目录
:cd path `改变vim的工作目录
:set autochdir `可以让vim 根据编辑的文件自动切换工作目录

8.2 一些快捷键

命令作用
K打开光标所在词的manpage
g <c-g>统计全文或统计部分的字数

8.3 在线帮助

命令作用
:h(elp)或<F1>打开总的帮助
:help user-manual打开用户手册

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

命令作用
:helptags somepath为somepath中的文档生成索引
:helpgrep可以搜索整个帮助文档,匹配的列表显示在quickfix窗口中
Ctrl+]跳转到tag主题,Ctrl+t 跳回
:ver显示版本信息

8.4 一些小功能

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

9. 排版

排版使用较少,所以放在靠后位置

9.1 基本排版

按键作用
<</>>左/右缩进一个shiftwidth
:ce(nter)/:le(ft)/:ri(ght)本行文字居中/靠左/靠右
gq对选中的文字重排,即对过长的文字进行断行
gq#j重排当前行和下面#
gq#q重排#行,#为空则仅当前行
gq#ap重排#段,#为空则仅当前段
gqQ重排当前段到文章末尾
J/gJ拼接当前行和下一行,后者不保存空格

9.2 拼写检查

按键作用
:set spell/:set nospell开启/关闭拼写检查功能
]s/[s移到下一个/上一个拼写错误的单词
z=显示一个有关拼写错误单词的列表,可从中选择
zg告诉拼写检查器该单词是拼写正确的
zw与上一命令相反,告诉拼写检查器该单词是拼写错误的

官方键位图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考

网页1

  • 14
    点赞
  • 122
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值