Vim Cheat Sheet
Vim Cheat Sheet
转载至 https://vim.rtorr.com/lang/zh_cn/
全局
:help 关键字
- 打开关键字帮助:saveas 文件名
- 另存为:close
- 关闭当前窗口K
- 打开光标所在单词的 man 页面
移动光标
h
- 左移光标j
- 下移光标k
- 上移光标l
- 右移光标H
- 移动到当前页面顶部M
- 移动到当前页面中间L
- 移动到当前页面底部w
- 移动到下个单词开头W
- 移动到下个单词开头(单词含标点)e
- 移动到下个单词结尾E
- 移动到下个单词结尾(单词含标点)b
- 移动到上个单词开头B
- 移动到上个单词开头(单词含标点)%
- 跳转到配对的符号(默认支持的配对符号组:: ‘()’, ‘{}’, ‘[]’ - 在 vim 中使用:h matchpairs
获得更多信息)0
- 移动到行首^
- 移动到行首的非空白符$
- 移动到行尾g_
- 移动到行内最后一个非空白符gg
- 移动到文件第一行G
- 移动到文件最后一行5G
- 移动到第五行fx
- 移动到字符 x 下次出现的位置tx
- 移动到字符 x 下次出现的位置的前一个字符Fx
- 移动到字符 x 上次出现的位置Tx
- 移动到字符 x 上次出现的位置的后一个字符;
- 重复之前的 f、t、F、T 操作,
- 反向重复之前的 f、t、F、T 操作}
- 移动到下一个段落 (当编辑代码时则为函数/代码块){
- 移动到上一个段落 (当编辑代码时则为函数/代码块)zz
- 移动屏幕使光标居中Ctrl + e
- 向下移动屏幕一行(保持光标不动)Ctrl + y
- 向上移动屏幕一行(保持光标不动)Ctrl + b
- 向上滚动一屏Ctrl + f
- 向下滚动一屏Ctrl + d
- 向下滚动半屏Ctrl + u
- 向上滚动半屏
Tip 命令前追加数字表示命令的重复次数, 比如 4j
表示向下移动四行
插入模式 - 插入/追加文本
i
- 从光标前开始插入字符I
- 从行首开始插入字符a
- 从光标后开始插入字符A
- 从行尾开始插入字符o
- 在当前行之下另起一行, 开始插入字符O
- 在当前行之上另起一行, 开始插入字符ea
- 从当前单词末尾开始插入Esc
- 退出插入模式
编辑文本
r
- 替换当前字符J
- 将下一行合并到当前行, 并在两部分文本之间插入一个空格gJ
- 将下一行合并到当前行, 两部分文本之间不含空格gwip
- 重新调整段落cc
- 将光标所在的行删除, 然后进入插入模式C
- 将光标处到行尾删除, 然后进入插入模式c$
- 将光标处到行尾删除, 然后进入插入模式ciw
- 将光标所在的单词删除, 然后进入插入模式cw
- 从光标位置开始, 修改单词s
- 删除当前字符, 然后进入插入模式S
- 清空当前行, 然后进入插入模式 (同<kbd>cc</kbd>)xp
- 当前字符后移u
- 撤销Ctrl + r
- 重复.
- 再次执行上个命令
选择文本(可视化模式)
v
- 进入可视化模式, 移动光标高亮选择, 然后可以对选择的文本执行命令(比如<kbd>y</kbd>-复制)V
- 进入可视化模式(行粒度选择)o
- 切换光标到选择区开头/结尾Ctrl + v
- 进入可视化模式(矩阵选择)O
- 切换光标到选择区的角aw
- 选择当前单词ab
- 选择被 () 包裹的区域(含括号)aB
- 选择被 {} 包裹的区域(含花括号)ib
- 选择被 () 包裹的区域(不含括号)iB
- 选择被 {} 包裹的区域(不含花括号)Esc
- 退出可视化模式
可视化模式命令
>
- 向右缩进<
- 向左缩进y
- 复制d
- 剪切~
- 大小写切换
寄存器
:reg
- 显示寄存器内容"xy
- 复制内容到寄存器 x"xp
- 粘贴寄存器 x 中的内容
Tip 寄存器被存储在 ~/.viminfo 中, 在下次重启 vim 时仍会加载
Tip 寄存器 0 存储上一次复制的值
标记
:marks
- 标记列表ma
- 设置当前位置为标记 a- `a - 跳转到标记 a 的位置
- y`a - 复制当前位置到标记 a 的内容
宏
qa
- 录制宏 aq
- 停止录制宏@a
- 执行宏 a@@
- 重新执行上次执行的宏
剪切, 复制, 粘贴
yy
- 复制当前行2yy
- 复制 2 行yw
- 复制当前单词y$
- 复制, 从光标位置到行末p
- 在光标后粘贴P
- 在光标前粘贴dd
- 剪切当前行2dd
- 剪切 2 行dw
- 剪切当前单词D
- 剪切, 从光标位置到行末d$
- 剪切, 从光标位置到行末 (同<kbd>D</kbd>)x
- 剪切当前字符
退出
:w
- 保存:w !sudo tee %
- 使用 sudo 保存当前文件:wq or :x or ZZ
- 保存并退出:q
- 退出(修改未保存时警告):q! or ZQ
- 不保存强制退出:wqa
- 保存所有标签页并全部退出
查找/替换
/pattern
- 查找<kbd>pattern</kbd>?pattern
- 向上查找<kbd>pattern</kbd>\vpattern
- <kbd>pattern</kbd> 中的非字母数字字符被视为正则表达式特殊字符 (不需转义字符)n
- 查找下一个N
- 查找上一个:%s/old/new/g
- 替换全部:%s/old/new/gc
- (逐个)替换:noh
- 移除搜索结果的高亮显示
多文件搜索
:vimgrep /pattern/ {'{file}'}
- 在多个文件中搜索 <kbd>pattern</kbd>
e.g. :vimgrep /foo/ **/*
:cn
- 移动至下一个:cp
- 移动至上一个:copen
- 打开搜索结果列表
多文件编辑
:e
文件名 - 新建缓冲区打开 filename:bnext or :bn
- 切换到下个缓冲区:bprev or :bp
- 切换到上个缓冲区:bd
- 关闭缓冲区:ls
- 列出所有打开的缓冲区:sp 文件名
- 新建缓冲区打开 filename 并水平分割窗口:vsp 文件名
- 新缓冲区打开 filename 并垂直分割窗口Ctrl + ws
- 水平分割窗口Ctrl + ww
- 在窗口间切换Ctrl + wq
- 关闭窗口Ctrl + wv
- 垂直分割窗口Ctrl + wh
- 切换到右侧窗口Ctrl + wl
- 切换到左侧窗口Ctrl + wj
- 切换到下侧窗口Ctrl + wk
- 切换到上侧窗口
标签
:tabnew or :tabnew {page.words.file}
- 在新标签中打开文件Ctrl + wT
- 将窗口变成标签gt or :tabnext or :tabn
- 切换到下一个标签gT or :tabprev or :tabp
- 切换到上一个标签#gt
- 切换到第 <kbd>#</kbd> 个标签:tabmove #
- 移动标签到第 <kbd>#</kbd> 位(下标从 0 开始):tabclose or :tabc
- 关闭当前标签:tabonly or :tabo
- 关闭其他标签:tabdo command
- 在所有标签中执行命令 (例如 :tabdo q 关闭所有标签)