Vim Cheat Sheet
A new terminal focused on developer productivity
Vim Cheat Sheet
全局
:h[elp] 关键字- 打开关键字帮助:sav[eas] 文件名- 另存为:clo[se]- 关闭当前窗口:ter[minal]- 打开一个shell窗口K- 打开光标所在单词的man页面
Tip 在终端中运行 vimtutor 以学习最基础的 Vim 命令。
移动光标
h- 左移光标j- 下移光标k- 上移光标l- 右移光标gj- 下移光标(折行文本)gk- 上移光标(折行文本)H- 移动到当前页面顶部M- 移动到当前页面中间L- 移动到当前页面底部w- 移动到下个单词开头W- 移动到下个单词开头(单词含标点)e- 移动到下个单词结尾E- 移动到下个单词结尾(单词含标点)b- 移动到上个单词开头B- 移动到上个单词开头(单词含标点)ge- 移动到上个单词结尾gE- 移动到上个单词结尾(单词含标点)%- 跳转到配对的符号(默认支持的配对符号组: '()', '{}', '[]' - 在vim中使用:h matchpairs获得更多信息)0- 移动到行首^- 移动到行首的非空白符$- 移动到行尾g_- 移动到行内最后一个非空白符gg- 移动到文件第一行G- 移动到文件最后一行5ggor5G- 移动到第五行gd- 跳转到局部定义gD- 跳转到全局定义fx- 移动到字符 x 下次出现的位置tx- 移动到字符 x 下次出现的位置的前一个字符Fx- 移动到字符 x 上次出现的位置Tx- 移动到字符 x 上次出现的位置的后一个字符;- 重复之前的f、t、F、T操作,- 反向重复之前的f、t、F、T操作}- 移动到下一个段落 (当编辑代码时则为函数/代码块){- 移动到上一个段落 (当编辑代码时则为函数/代码块)zz- 移动屏幕使光标居中zt- 移动屏幕使光标位于屏幕顶部zb- 移动屏幕使光标位于屏幕底部Ctrl+e- 向下移动屏幕一行(保持光标不动)Ctrl+y- 向上移动屏幕一行(保持光标不动)Ctrl+b- 向上滚动一屏Ctrl+f- 向下滚动一屏Ctrl+d- 向下滚动半屏Ctrl+u- 向上滚动半屏
Tip 命令前追加数字表示命令的重复次数, 比如 4j 表示向下移动四行
插入模式 - 插入/追加文本
i- 从光标前开始插入字符I- 从行首开始插入字符a- 从光标后开始插入字符A- 从行尾开始插入字符o- 在当前行之下另起一行, 开始插入字符O- 在当前行之上另起一行, 开始插入字符ea- 从当前单词末尾开始插入Ctrl+h- 在插入模式下,删除光标前的字符Ctrl+w- 在插入模式下,删除光标前的单词Ctrl+j- 在插入模式下,另起一行Ctrl+t- 在插入模式下,向右缩进,宽度由 shiftwidth 控制Ctrl+d- 在插入模式下,向左缩进,宽度由 shiftwidth 控制Ctrl+n- 在插入模式下,在光标之前插入自动补全的下一个匹配项Ctrl+p- 在插入模式下,在光标之前插入自动补全的上一个匹配项Ctrl+rx- 插入寄存器 x 的内容Ctrl+ox- 暂时进入正常模式以发出一个正常模式命令 x。EscorCtrl+c- 退出插入模式
编辑文本
r- 替换当前字符R- 在ESC按下之前,替换多个字符J- 将下一行合并到当前行, 并在两部分文本之间插入一个空格gJ- 将下一行合并到当前行, 两部分文本之间不含空格gwip- 重新调整段落g~- 大小写转换操作修饰符gu- 小写操作修饰符gU- 大写操作修饰符cc- 将光标所在的行删除, 然后进入插入模式c$orC- 将光标处到行尾删除, 然后进入插入模式ciw- 将光标所在的单词删除, 然后进入插入模式cworce- 从光标位置开始, 修改单词s- 删除当前字符, 然后进入插入模式S- 清空当前行, 然后进入插入模式 (同cc)xp- 当前字符后移u- 撤销U- 撤销上一次的改动行的操作Ctrl+r- 重做(取消撤销).- 再次执行上个命令
选择文本(可视化模式)
v- 进入可视化模式, 移动光标高亮选择, 然后可以对选择的文本执行命令(比 y - 复制)V- 进入可视化模式(行粒度选择)o- 切换光标到选择区开头/结尾Ctrl+v- 进入可视化模式(矩阵选择)O- 切换光标到选择区的角aw- 选择当前单词ab- 选择被 () 包裹的区域(含括号)aB- 选择被 {} 包裹的区域(含花括号)at- 选择被 <> 标签包裹的区域(含<>标签)ib- 选择被 () 包裹的区域(不含括号)iB- 选择被 {} 包裹的区域(不含花括号)it- 选择被 <> 标签包裹的区域(不含<>标签)EscorCtrl+c- 退出可视化模式
Tip 也可以使用 ( 和 { 分别代替 b 和 B
可视化模式命令
>- 向右缩进<- 向左缩进y- 复制d- 剪切~- 大小写切换u- 将选中文本转换为小写U- 将选中文本转换为大写
寄存器
:reg[isters]- 显示寄存器内容"xy- 复制内容到寄存器 x"xp- 粘贴寄存器 x 中的内容"+y- 复制内容到系统剪贴板寄存器"+p- 粘贴系统剪贴板寄存器的内容
Tip 寄存器被存储在 ~/.viminfo 中, 在下次重启vim时仍会加载
Tip 特殊寄存器:
0 - 上次复制
" - 未命名寄存器,上次复制或删除
% - 当前文件名
# - 轮换文件名
* - 剪贴板内容 (X11 primary)
+ - 剪贴板内容 (X11 clipboard)
/ - 上次搜索的pattern
: - 上次执行的命令
. - 上次插入的文本
- - 上次剪切的短于一行的文本
= - 表达式寄存器
_ - 黑洞寄存器
标记
:marks- 标记列表ma- 设置当前位置为标记 a`a- 跳转到标记 a 的位置y`a- 复制当前位置到标记 a 的内容`0- 跳转到上次 Vim 退出时的位置`"- 跳转到上次编辑该文件时的位置`.- 跳转到上次修改的位置``- 跳转回上次跳转前的位置:ju[mps]- 列出跳转历史记录Ctrl+i- 跳转至跳转历史中较晚的位置Ctrl+o- 跳转回跳转历史中较早的位置:changes- 列出修改历史记录g,- 跳转至修改历史中较晚修改的位置g;- 跳转至修改历史中较早修改的位置Ctrl+]- 跳转到当前光标位置对应的 tag
Tip 可以使用反引号(`)或单引号(')跳转至标记位置。使用单引号会跳转至该标记所在行行首(首个非空白字符)。
宏
qa- 录制宏 aq- 停止录制宏@a- 执行宏 a@@- 重新执行上次执行的宏
剪切, 复制, 粘贴
yy- 复制当前行2yy- 复制 2 行yw- 复制当前单词yiw- 复制光标处的单词yaw- 复制光标处的单词及其前后的空格y$orY- 复制, 从光标位置到行末p- 在光标后粘贴P- 在光标前粘贴gp- 在光标后粘贴并把光标定位于粘贴的文本之后gP- 在光标前粘贴并把光标定位于粘贴的文本之后dd- 剪切当前行2dd- 剪切 2 行dw- 剪切当前单词diw- 删除光标处的单词daw- 删除光标处的单词及其前后的空格:3,5d- 删除 3 至 5 行
Tip 你也可以使用以下字符来指定范围:
e.g.
:.,$d - 从当前行到文件末尾
:.,1d - 从当前行到文件开头
:10,1d - 第 10 行到文件末尾
:g/{pattern}/d- 删除所有包含 pattern 的行:g!/{pattern}/d- 删除所有不包含 pattern 的行d$orD- 剪切, 从光标位置到行末 (同 D )x- 剪切当前字符
文字缩进
>>- 将当前行向右缩进,宽度由 shiftwidth 控制<<- 将当前行向左缩进,宽度由 shiftwidth 控制>%- 向右缩进 () 或 {} 内的区域 (光标需置于括号上)<%- 向左缩进 () 或 {} 内的区域 (光标需置于括号上)>ib- 向右缩进 () 内的区域>at- 向右缩进 <> 标签内的区域3==- 自动缩进 3 行=%- 自动缩进 () 或 {} 内的区域 (光标需置于括号上)=iB- 自动缩进 {} 内的区域 (光标需置于括号上)gg=G- 自动缩进整个缓冲区]p- 粘贴并调整缩进至当前行
退出
:w- 保存:w !sudo tee %- 使用 sudo 保存当前文件:wqor:xorZZ- 保存并退出:q- 退出(修改未保存时警告):q!orZQ- 不保存强制退出:wqa- 保存所有标签页并全部退出
查找/替换
/pattern- 查找 pattern?pattern- 向上查找 pattern\vpattern- pattern 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符)n- 查找下一个N- 查找上一个:%s/old/new/g- 替换全部:%s/old/new/gc- (逐个)替换:noh[lsearch]- 移除搜索结果的高亮显示
多文件搜索
:vim[grep] /pattern/ {`{file}`}- 在多个文件中搜索 pattern
e.g. :vim[grep] /foo/ **/*
:cn[ext]- 移动至下一个:cp[revious]- 移动至上一个:cope[n]- 打开搜索结果列表:ccl[ose]- 关闭 quickfix 窗口
标签
:tabnewor:tabnew {page.words.file}- 在新标签中打开文件Ctrl+wT- 将窗口变成标签gtor:tabn[ext]- 切换到下一个标签gTor:tabp[revious]- 切换到上一个标签#gt- 切换到第 # 个标签:tabm[ove] #- 移动标签到第 # 位(下标从 0 开始):tabc[lose]- 关闭当前标签:tabo[nly]- 关闭其他标签:tabdocommand - 在所有标签中执行命令 (例如:tabdo q关闭所有标签)
多文件编辑
:e[dit] 文件名- 新建缓冲区打开 filename:bn[ext]- 切换到下个缓冲区:bp[revious]- 切换到上个缓冲区:bd[elete]- 关闭缓冲区:b[uffer]#- 切换到第 # 个缓冲区:b[uffer] file- 用文件名切换缓冲区:lsor:buffers- 列出所有打开的缓冲区:sp[lit] 文件名- 新建缓冲区打开 filename 并水平分割窗口:vs[plit] 文件名- 新缓冲区打开 filename 并垂直分割窗口:vert[ical] ba[ll]- 垂直分割窗口编辑所有缓冲区:tab ba[ll]- 标签页编辑所有缓冲区Ctrl+ws- 水平分割窗口Ctrl+wv- 垂直分割窗口Ctrl+ww- 在窗口间切换Ctrl+wq- 关闭窗口Ctrl+wx- 当前窗口与下一个窗口交换位置Ctrl+w=- 令所有窗口高 & 宽一致Ctrl+wh- 切换到左侧窗口Ctrl+wl- 切换到右侧窗口Ctrl+wj- 切换到下侧窗口Ctrl+wk- 切换到上侧窗口Ctrl+wH- 使游标所在视窗全高并移至最左 (最左垂直视窗)Ctrl+wL- 使游标所在视窗全高并移至最右 (最右垂直视窗)Ctrl+wJ- 使游标所在视窗全宽并移至最下 (最下水平视窗)Ctrl+wK- 使游标所在视窗全宽并移至最上 (最上水平视窗)
Diff
zf- 定义折叠修饰符zd- 删除光标位置的折叠za- 展开 & 关闭光标位置的折叠zo- 展开光标位置的折叠zc- 关闭光标位置的折叠zr- 展开同级的所有折叠zm- 关闭同级的所有折叠zi- 开启 & 关闭折叠功能]c- 光标移至下一处差异[c- 光标移至上一处差异door:diffg[et]- 将另一缓冲区中的差异合并至当前缓冲区dpor:diffpu[t]- 将当前缓冲区中的差异推送至另一缓冲区:diffthis- 令当前窗口成为 diff 模式的窗口之一:dif[fupdate]- 强制刷新 diff 的高亮与折叠:diffo[ff]- 令当前窗口退出 diff 模式
Tip 折叠命令(e.g. za)只作用于当前级别。使用大写字母(e.g. zA)令命令作用于全部级别。
Tip 可以直接在终端运行 vimdiff 查看文件间的不同。也可以将该程序设为 git difftool 的选项之一。
Additional Resources
Languages
- العربية
- বাংলা
- Català
- Čeština
- Dansk
- Deutsch
- Ελληνικά
- English
- Esperanto
- Español
- Persian
- Suomi
- Français
- עברית
- Hrvatski
- Magyar
- Bahasa Indonesia
- Italiano
- 日本語
- 한국어
- မြန်မာ
- Nederlands
- Norsk
- Polski
- Português - Brasil
- Português - Portugal
- Romana
- Русский
- සිංහල
- Slovenčina
- Svenska
- ภาษาไทย
- Türkçe
- Українська
- Tiếng Việt
- 简体中文
- 中文 (台灣)
About the vim cheat sheet
This project aims to be one of the most accessible vim guides available. We made sure to support mobile, desktop, and other languages.
❤️ Please consider sponsoring this project ❤️!
You can read about how to contribute (and help improve) by viewing our README . There you can see how to set up this project, or how to contribute a new language. Here is a big thank you to our contributors!
This project is licensed under The MIT License (MIT) .
Other places to find this document
This document was embedded in DuckDuckGo .
More resources
Interactive Vim tutorial: Open Vim
Vim quick reference from Vim help pages: quickref.txt
List of all Vim ex (:) commands: ex-cmd-index
Checkout the source on Github
version: 3.2.0