原文地址:https://ctrlcv-dev.com/vim
原文Markdown:https://github.com/BAI-Bonjwa/ctrlcv/blob/main/docs/vim.md
VIM 是一款非常高效的文本编辑工具,但其复杂的命令即使我使用多年也已经没办法记全,因此整理了一个指令表以方便查询使用。
定位
页面
快捷键 |
说明 |
h j k l
|
上下左右移动 |
<C-U> / <C-D>
|
半页翻页 |
<C-B> / <C-F>
|
整页翻页 |
单词
快捷键 |
说明 |
b / w
|
上一个/下一个单词 |
ge / e
|
上一个/下一个单词的末尾 |
行
快捷键 |
说明 |
0 (zero)
|
行首 |
^ |
行首(不计空格) |
$ |
行尾 |
字符
快捷键 |
说明 |
fc |
向前查找字符 c
|
Fc |
向后查找字符 c
|
文档
快捷键 |
说明 |
gg |
第一行 First line |
G |
最后一行 Last line |
:n |
跳转至第 n 行 |
nG |
同上 |
窗口
快捷键 |
说明 |
zz |
将当前行移至窗口中心 |
zt |
将当前行移至顶部 |
zb |
将当前行移至底部 |
H |
光标移动至屏幕顶部 |
M |
光标移动至屏幕中心 |
L |
光标移动至屏幕底部 |
搜索
快捷键 |
说明 |
n |
下一个匹配的搜索结果 |
N |
上一个匹配的搜索结果 |
* |
下一个匹配的整个单词 |
# |
上一个匹配的整个单词 |
Tab 页
快捷键 |
说明 |
:tabedit [file] |
在新的 Tab 中编辑文件 |
:tabfind [file] |
在新的 Tab 中打开文件 |
:tabclose |
关闭当前 Tab |
:tabs |
列出全部 Tab |
:tabfirst |
跳转至第一个 Tab |
:tablast |
跳转至最后一个 Tab |
:tabn |
跳转至下一个 Tab |
:tabp |
跳转至前一个 Tab |
编辑
快捷键 |
说明 |
a |
在当前字符后插入 |
A |
在该行的最后插入 |
i |
在当前光标处插入 |
o |
在下一行插入 |
O |
在前一行插入 |
--- |
--- |
s |
删除字符并插入 |
S |
删除行并插入 |
C |
删除至该行末尾的字符并插入 |
--- |
--- |
r |
替换一个字符 |
R |
进入替换模式 |
--- |
--- |
u |
撤销改变 |
<C-R> |
重做改变 |
退出插入模式
快捷键 |
说明 |
Esc / <C-[>
|
退出插入模式 |
<C-C> |
退出插入模式并终止当前命令 |
剪贴板
快捷键 |
说明 |
x |
删除字符 |
--- |
--- |
dd |
删除行 (剪切)
|
yy |
复制行 |
--- |
--- |
p |
粘贴 |
P |
在光标前粘贴 |
--- |
--- |
"*p / "+p
|
从系统剪贴板中粘贴 |
"*y / "+y
|
粘贴至系统剪贴板中 |
选择模式
快捷键 |
说明 |
v |
进入选择模式 |
V |
进入选择行模式 |
<C-V> |
进入选择块模式 |
在选择模式中
快捷键 |
说明 |
d / x
|
删除选择 |
s |
替换选择 |
y |
复制选择 |
详见 操作 来看其他可以执行的操作
操作
操作列表
快捷键 |
说明 |
d |
删除 |
y |
复制 |
c |
删除并插入 |
--- |
--- |
> |
向右缩进 |
< |
向左缩进 |
= |
自动缩进 |
--- |
--- |
g~ |
交换字符 |
gU |
转换为大写字符 |
gu |
转换为小写字符 |
--- |
--- |
! |
通过外部的命令过滤 |
详见 :help operator
操作示例
快捷键 |
说明 |
d d
|
删除当前行 |
d w
|
删除下一个单词 |
d b
|
删除至单词开始 |
2dd
|
删除 2 行 |
d ip
|
删除一段 |
(在选择模式中) d
|
删除已选择的内容 |
详见: :help motion.txt
文本对象
快捷键 |
说明 |
p |
段落 |
w |
单词 |
s |
句子 |
--- |
--- |
[ ( { <
|
带括号的文本段落 |
' " \ ` |
带引号的字符串 |
--- |
--- |
b |
在 [( 的文本块 |
B |
在[{ 的文本块 |
t |
一个 XML 标签的文本块 |
文本对象示例
快捷键 |
说明 |
vip |
选择段落 |
vipipipip |
选择更多段落 |
--- |
--- |
yip |
复制段落 |
yap |
复制段落(包含空行) |
--- |
--- |
dip |
删除段落 |
cip |
删除段落并插入 |
杂项 {data-columns=3}
退出
快捷键 |
说明 |
:qa |
关闭所有文件 |
:qa! |
关闭所有文件,不提示保存 |
--- |
--- |
:w |
保存 |
:wq / :x
|
保存并关闭文件 |
--- |
--- |
:q |
关闭文件 |
:q! |
关闭保存,不提示保存 |
--- |
--- |
ZZ |
保存并退出 |
ZQ |
不检查内容变化并退出 |
折叠
快捷键 |
说明 |
zo / zO
|
打开 |
zc / zC
|
关闭 |
za / zA
|
切换打开/关闭状态 |
--- |
--- |
zv |
打开当前行的折叠 |
--- |
--- |
zM |
关闭所有折叠 |
zR |
打开所有折叠 |
--- |
--- |
zm |
折叠更多 (折叠等级 += 1)
|
zr |
折叠更少 (折叠等级 -= 1)
|
--- |
--- |
zx |
更新折叠 |
大写的字母均是递归的含义,例如 zO
为递归的打开折叠
定位
快捷键 |
说明 |
% |
最近的{[()]} 括号匹配 |
[( [{ [<
|
前一个 ( 或 { 或 <
|
]) |
下一个 |
--- |
--- |
[m |
前一个方法开始 |
[M |
前一个方法末尾 |
跳转
快捷键 |
说明 |
<C-O> |
返回至上一个位置 |
<C-I> |
前进至下一个位置 |
--- |
--- |
gf |
跳转至当前位置指向的文件 |
计数器
窗口
快捷键 |
说明 |
z{height}<Cr> |
将窗口调整尺寸至 {height} 高 |
标签
快捷键 |
说明 |
:tag Classname |
跳转至第一个 Classname 的定义处 |
--- |
--- |
<C-]> |
跳转至定义 |
g] |
查看全部定义 |
<C-T> |
后退至最新的标签 |
<C-O> <C-I> |
前进/后退 |
--- |
--- |
:tselect Classname |
查找 Classname 的定义 |
:tjump Classname |
查找 Classname 的定义(并自动选择第一个) |
Diff
快捷键 |
说明 |
gvimdiff file1 file2 [file3] |
查看两个文件普通的地方 |
大小写
快捷键 |
说明 |
~ |
切换大小写,例如(Case => cASE) |
gU |
转换成大写 |
gu |
转换成小写 |
--- |
--- |
gUU |
转换当前行为大写 (也可以用 gUgU ) |
guu |
转换当前行为小写 (也可以用 gugu ) |
可以在正常模式和选择模式下使用这个功能
标记
快捷键 |
说明 |
``^` |
上一个指针在插入模式时的位置 |
``.` |
在当前的缓冲区中最后变更的位置 |
``"` |
当前的缓冲区中最后退出的位置 |
``0` |
最后文件的修改 |
'' |
返回至当前缓冲区跳转的行 |
`` |
返回至当前缓冲区跳转的位置 |
`[ |
跳转至修改或复制的文本开头处 |
`] |
跳转至修改或复制的文本结尾处 |
`< |
跳转至最后选择的内容开头处 |
`> |
跳转至最后选择的内容结尾处 |
--- |
--- |
ma |
标记当前的指针位置为 a
|
`a |
跳转至指针位置 a
|
'a |
跳转至指针位置 a 的行首 |
d'a |
从当前行删除到 a 标记处 |
d`a |
从当前位置删除到 a 标记处 |
c'a |
从当前位置删除到 a 标记处并插入 |
y`a |
从当前位置复制到 a 标记处 |
--- |
--- |
:marks |
列出全部的标记 |
:delm a |
删除标记 a
|
:delm a-d |
删除标记 a , b , c , d
|
:delm abc |
删除标记 a , b , c
|
杂项
快捷键 |
说明 |
. |
重复上一条命令 |
]p |
保持当前的缩进粘贴 |
--- |
--- |
:set ff=unix |
转换 Window 行尾标记为 Unix 行尾标记 |
命令行
快捷键 |
说明 |
<C-R><C-W> |
插入当前的单词至命令行 |
<C-R>" |
Paste from " register |
<C-X><C-F> |
插入模式中的自动完成路径 |
Text alignment
快捷键 |
说明 |
:center |
居中 |
:right" |
右对齐 |
:left |
左对齐 |
详见 :help formatting
计算器
快捷键 |
说明 |
<C-R>=128/2 |
Shows the result of the division : '64' |
在插入模式中使用
退出并抛出错误
:cq
:cquit
和 :qa
类似, 但抛出一个一样,一般用于 Git 命令的时候
拼写检查
快捷键 |
说明 |
:set spell spelllang=en_us |
启动英语的拼写检查 |
]s |
移动至下一个拼写错误的单词开始处 |
[s |
移动至前一个拼写错误的单词的末尾处 |
z= |
当前单词的建议拼写 |
zg |
添加单词至拼写列表 |
zw |
标记一个单位为拼写错误 |
zu / C-X (Insert Mode)
|
聪明拼写文件中提示建议单词写法 |
详见 :help spell
参考资料