插件相关 ------------ | 快捷键 | 说明 | | ------- | ----- | | `,` | Leader Key | | `n` | 打开/关闭代码资源管理器 | | `t` | 打开/关闭函数列表 | | `a` | .h .cpp 文件切换 | | `i` | 转到函数声明 | | `u` | 转到函数实现 | | `o` | 打开include文件 | | `y` | 拷贝函数声明 | | `p` | 生成函数定义 | | `w` | 单词跳转 | | `f` | 搜索~目录下的文件 | | `` | 分析语法错误 | | `` | 启用markdown实时预览 | | `` | 关闭markdown实时预览 | | `` | 显示上一主题 | | `` | 显示下一主题 | | `:Tab /=` | 按等号对齐,也可以是竖线 | | `gcc` | 注释代码 | | `:DirDiff ` | 目录比较 | | `vif` | 选中函数内容 | | `dif` | 删除函数内容 | | `cif` | 改写函数内容 | | `vaf` | 选中函数内容(包括函数名 花括号) | | `daf` | 删除函数内容(包括函数名 花括号) | | `caf` | 改写函数内容(包括函数名 花括号) | 插入模式 ------------ | 快捷键 | 说明 | | ------- | ----- | | `i` | 在光标处进入插入模式 | | `I` | 在行首进入插入模式 | | `a` | 在光标后进入插入模式 | | `A` | 在行尾进入插入模式 | | `o` | 在下一行插入新行并进入插入模式 | | `O` | 在上一行插入新行并进入插入模式 | | `gi` | 进入到上一次插入模式的位置 | | `` | 退出插入模式 | 缓存操作 ------------ | 快捷键 | 说明 | | ------- | ----- | | `:e ` | 新建buffer打开文件 | | `` | 切换到上一个buffer | | `` | 切换到下一个buffer | | `d` | 删除当前buffer | 窗口操作 ------------ | 快捷键 | 说明 | | ------- | ----- | | `:sp ` | 横向切分窗口并打开文件 | | `:vsp ` | 竖向切分窗口并打开文件 | | `h` | 跳到左边的窗口 | | `j` | 跳到下边的窗口 | | `k` | 跳到上边的窗口 | | `l` | 跳到右边的窗口 | | `d` | 删除当前窗口 | 光标移动 ------------ | 快捷键 | 说明 | | ------- | ----- | | `h` | 上下左右移动 | | `j` | 上下左右移动 | | `k` | 上下左右移动 | | `l` | 上下左右移动 | | `0` | 光标移动到行首 | | `^` | 跳到从行首开始第一个非空白字符 | | `$` | 光标移动到行尾 | | `` | 跳到上一个位置 | | `` | 跳到下一个位置 | | `` | 上一页 | | `` | 下一页 | | `` | 上移半屏 | | `` | 下移半屏 | | `H` | 调到屏幕顶上 | | `M` | 调到屏幕中间 | | `L` | 调到屏幕下方 | | `:n` | 跳到第n行 | | `w` | 跳到下一个单词开头(标点或空格分隔的单词) | | `W` | 跳到下一个单词开头(空格分隔的单词) | | `e` | 跳到下一个单词尾部(标点或空格分隔的单词) | | `E` | 跳到下一个单词尾部(空格分隔的单词) | | `b` | 上一个单词头(标点或空格分隔的单词) | | `B` | 上一个单词头(空格分隔的单词) | | `ge` | 上一个单词尾 | | `%` | 在配对符间移动, 可用于()、{}、[] | | `gg` | 到文件首 | | `G` | 到文件尾 | | `fx` | 跳转到下一个为x的字符 | | `Fx` | 跳转到上一个为x的字符 | | `tx` | 跳转到下一个为x的字符前 | | `Tx` | 跳转到上一个为x的字符前 | | `;` | 跳到下一个搜索的结果 | 文本编辑 ------------ | 快捷键 | 说明 | | ------- | ----- | | `r` | 替换当前字符 | | `R` | 进入替换模式,直至 ESC 离开 | | `s` | 替换字符(删除光标处字符,并进入插入模式,前可接数量) | | `S` | 替换行(删除当前行,并进入插入模式,前可接数量) | | `cc` | 改写当前行(删除当前行并进入插入模式),同 S | | `cw` | 改写光标开始处的当前单词 | | `ciw` | 改写光标所处的单词 | | `caw` | 改写光标所处的单词,并且包括前后空格(如果有的话) | | `c0` | 改写到行首 | | `c^` | 改写到行首(第一个非零字符) | | `c$` | 改写到行末 | | `ci"` | 改写双引号中的内容 | | `ci'` | 改写单引号中的内容 | | `ci)` | 改写小括号中的内容 | | `ci]` | 改写中括号中内容 | | `ci}` | 改写大括号中内容 | | `cit` | 改写 xml tag 中的内容 | | `cis` | 改写当前句子 | | `c2w` | 改写下两个单词 | | `ct(` | 改写到小括号前 | | `x` | 删除当前字符,前面可以接数字,3x代表删除三个字符 | | `X` | 向前删除字符 | | `dd` | 删除当前行 | | `d0` | 删除到行首 | | `d^` | 删除到行首(第一个非零字符) | | `d$` | 删除到行末 | | `D` | 删除到行末(同 d$) | | `dw` | 删除当前单词 | | `diw` | 删除光标所处的单词 | | `daw` | 删除光标所处的单词,并包含前后空格(如果有的话) | | `di"` | 删除双引号中的内容 | | `di'` | 删除单引号中的内容 | | `di)` | 删除小括号中的内容 | | `di]` | 删除中括号中内容 | | `di}` | 删除大括号中内容 | | `dit` | 删除 xml tag 中的内容 | | `dis` | 删除当前句子 | | `d2w` | 删除下两个单词 | | `dt(` | 删除到小括号前 | | `dgg` | 删除到文件头部 | | `dG` | 删除到文件尾部 | | `d}` | 删除下一段 | | `d{` | 删除上一段 | | `u` | 撤销 | | `U` | 撤销整行操作 | | `CTRL-R` | 撤销上一次 u 命令 | | `J` | 链接多行为一行 | | `.` | 重复上一次操作 | | `~` | 替换大小写 | | `g~iw` | 替换当前单词的大小写 | | `gUiw` | 将单词转成大写 | | `guiw` | 将当前单词转成小写 | | `guu` | 全行转为小写 | | `gUU` | 全行转为大写 | | `gg=G` | 缩进代码 | | `<<` | 减少缩进 | | `>>` | 增加缩进 | | `==` | 自动缩进 | | `CTRL-A` | 增加数字 | | `CTRL-X` | 减少数字 | | `p` | 粘贴到光标后 | | `P` | 粘贴到光标前 | | `v` | 开始标记 | | `y` | 复制标记内容 | | `V` | 开始按行标记 | | `CTRL-V` | 开始列标记 | | `y$` | 复制当前位置到本行结束的内容 | | `yy` | 复制当前行 | | `Y` | 复制当前行,同 yy | | `yiw` | 复制当前单词 | | `3yy` | 复制光标下三行内容 | | `v0` | 选中当前位置到行首 | | `v$` | 选中当前位置到行末 | | `viw` | 选中当前单词 | | `vi)` | 选中小括号内的东西 | | `vi]` | 选中中括号内的东西 | | `vis` | 选中句子中的东西 | | `gv` | 重新选择上一次选中的文字 | | `:set paste` | 允许粘贴模式(避免粘贴时自动缩进影响格式) | | `:set nopaste` | 禁止粘贴模式 | | `"?yy` | 复制当前行到寄存器 ? ,问号代表 0-9 的寄存器名称 | | `"?p` | 将寄存器 ? 的内容粘贴到光标后 | | `"?P` | 将寄存器 ? 的内容粘贴到光标前 | | `:registers` | 显示所有寄存器内容 | | `:[range]y` | 复制范围,比如 :20,30y 是复制20到30行,:10y 是复制第十行 | | `:[range]d` | 删除范围,比如 :20,30d 是删除20到30行,:10d 是删除第十行 | | `ddp` | 交换两行内容:先删除当前行复制到寄存器,并粘贴 | 文件操作 ------------ | 快捷键 | 说明 | | ------- | ----- | | `:w` | 保存文件 | | `:w ` | 按名称保存文件 | | `ZZ` | 保存文件(如果有改动的话),并关闭窗口 | | `:e ` | 打开文件并编辑 | | `:saveas ` | 另存为文件 | | `:r ` | 读取文件并将内容插入到光标后 | | `:r !dir` | 将dir命令的输出捕获并插入到光标后 | | `:close` | 关闭文件 | | `:q` | 退出 | | `:q!` | 强制退出 | | `:wa` | 保存所有文件 | | `:cd ` | 切换Vim当前路径 | | `:new` | 打开一个新的窗口编辑新文件 | | `:enew` | 在当前窗口创建新文件 | | `:vnew` | 在左右切分的新窗口中编辑新文件 | | `:tabnew` | 在新的标签页中编辑新文件 | 增删改查批量操作 ------------ | 快捷键 | 说明 | | ------- | ----- | | `/pattern` | 从光标处向文件尾搜索 pattern | | `?pattern` | 从光标处向文件头搜索 pattern | | `n` | 向同一方向执行上一次搜索 | | `N` | 向相反方向执行上一次搜索 | | `*` | 向前搜索光标下的单词 | | `#` | 向后搜索光标下的单词 | | `:s/p1/p2/g` | 将当前行中全替换p1为p2 | | `:%s/p1/p2/g` | 将当前文件中全替换p1为p2 | | `:%s/p1/p2/gc` | 将当前文件中全替换p1为p2,并且每处询问你是否替换 | | `:10,20s/p1/p2/g` | 将第10到20行中所有p1替换为p2 | | `:%s/1\\2\/3/123/g` | 将“1\2/3” 替换为 “123”(特殊字符使用反斜杠标注) | | `:%s/\r//g` | 删除 DOS 换行符 ^M | | `:g/^\s*$/d` | 删除空行 | | `:g/test/d` | 删除所有包含 test 的行 | | `:v/test/d` | 删除所有不包含 test 的行 | | `:%s/^/test/` | 在行首加入特定字符(也可以用宏录制来添加) | | `:%s/$/test/` | 在行尾加入特定字符(也可以用宏录制来添加) | 宏录制 ------------ | 快捷键 | 说明 | | ------- | ----- | | `qa` | 开始录制名字为a的宏 | | `q` | 结束录制宏 | | `@a` | 播放名字为a的宏 | | `100@a` | 播放名字为a的宏100次 | | `:normal@a` | 播放名字为a的宏直到自动结束 | 帮助 ------------ | 快捷键 | 说明 | | ------- | ----- | | `h tutor` | 入门文档 | | `h quickref` | 快速帮助 | | `h index` | 查询Vim所有键盘命令定义 | | `h summary` | 帮助你更好的使用内置帮助系统 | | `h pattern.txt` | 正则表达式帮助 | | `h eval` | 脚本编写帮助 | | `h function-list` | 查看VimScript的函数列表 | | `h windows.txt` | 窗口使用帮助 | | `h tabpage.txt` | 标签页使用帮助 | | `h tips` | 查看Vim内置的常用技巧文档 | 其他 ------------ | 快捷键 | 说明 | | ------- | ----- | | `vim -u NONE -N` | 开启vim时不加载vimrc文件 | | `e` | 快速编辑vimrc文件 | | `s` | 重新加载vimrc文件 | | `h` | 打开vimplus帮助文档 |