Vim快捷键备忘录
Vim 是一个高度可配置的文本编辑器,旨在高效地创建和更改任何类型的文本。它作为 "vi" 包含在大多数 UNIX 系统和 Apple OS X 中。
一共有 228 个常用软件的快捷键来自 Vim
全球的
:ter[minal] | 打开终端窗口 |
Ctrl b | 将屏幕向上移动一页(光标到最后一行) |
H | 移至屏幕顶部 |
gk | 向上移动光标(多行文本) |
Ctrl u | 将光标和屏幕向上移动 1/2 页 |
Ctrl e | 将屏幕向下移动一行(不移动光标) |
b | 跳转到单词的开头 |
:sav[eas] file | 将文件另存为 |
O | 在当前行上方添加(打开)一个新行 |
$ | 跳至行尾 |
gE | 向后跳转到单词的末尾(单词可以包含标点符号) |
gd | 移至本地声明 |
fx | 跳转到下一个出现的字符 x |
Ctrl j | 在插入模式下在光标位置添加换行符 |
5gg 5G | 转到第 5 行 |
K | 打开光标下的单词的手册页 |
, | 向后重复上一个 f、t、F 或 T 动作 |
gg | 转到文档的第一行 |
Ctrl p | 在插入模式下,在光标前插入(自动完成)上一个匹配项 |
Ctrl d | 将光标和屏幕向下移动 1/2 页 |
W | 跳转到单词的开头(单词可以包含标点符号) |
j | 向下移动光标 |
{ | 跳转到上一段(或编辑代码时的功能/块) |
a | 在光标后插入(追加) |
ea | 在单词末尾插入(附加) |
k | 向上移动光标 |
l | 向右移动光标 |
Esc Ctrl c | 退出插入模式 |
tx | 跳转到下一个字符 x 出现的位置 |
Ctrl w | 在插入模式下删除光标前的单词 |
; | 重复上一个 f、t、F 或 T 动作 |
G | 转到文档的最后一行 |
zb | 将光标置于屏幕底部 |
Fx | 跳转到字符 x 的上一次出现位置 |
Ctrl f | 将屏幕向下移动一页(光标到第一行) |
A | 在行尾插入(追加) |
ge | 跳转到单词末尾 |
zt | 将光标置于屏幕顶部 |
w | 跳转到单词的开头 |
e | 跳转到单词末尾 |
gD | 移至全局声明 |
Ctrl h | 在插入模式下删除光标前的字符 |
g_ | 跳转到该行的最后一个非空白字符 |
Ctrl rx | 插入寄存器 x 的内容 |
Ctrl n | 在插入模式下,在光标前插入(自动完成)下一个匹配项 |
^ | 跳转到该行的第一个非空白字符 |
L | 移至屏幕底部 |
M | 移至屏幕中间 |
:clo[se] | 关闭当前窗格 |
:h[elp] keyword | 打开关键字帮助 |
0 | 跳转到行首 |
% | 将光标移动到匹配的字符(默认支持对:“()”、“{}”、“[]” |
o | 在当前行下方添加(打开)一个新行 |
zz | 屏幕中心光标 |
B | 向后跳转到单词的开头(单词可以包含标点符号) |
i | 在光标前插入 |
Tx | 跳转到上一次出现字符 x 之后 |
} | 跳转到下一段(或编辑代码时的功能/块) |
Ctrl t | 插入模式下缩进(向右移动)一行 shiftwidth |
Ctrl d | 在插入模式下取消缩进(向左移动)行一个 shiftwidth |
h | 向左移动光标 |
gj | 向下移动光标(多行文本) |
E | 跳转到单词的末尾(单词可以包含标点符号) |
I | 插入到行首 |
Ctrl ox | 暂时进入正常模式发出一个正常模式命令x。 |
Ctrl y | 将屏幕向上移动一行(不移动光标) |
宏
>ib | 用 () 缩进内部块 |
@a | 运行宏a |
:tabdo | 在所有选项卡上运行命令(例如:tabdo q |
:q! ZQ | 退出并丢弃未保存的更改 |
:w | 写入(保存)文件,但不退出 |
p | 将剪贴板内容粘贴到光标后面 |
yaw | 拉出(复制)光标下的单词以及其后或前的空格 |
>% | 使用 () 或 {} 缩进块(光标位于括号上) |
]p | 粘贴并调整缩进至当前行 |
yw | 将单词的字符从光标位置复制到下一个单词的开头 |
yy | 复制一行 |
y$ Y | 复制(拉)至行末 |
:cope[n] | 打开一个包含比赛列表的窗口 |
:q | 退出(如果有未保存的更改则失败) |
Ctrl wT | 将当前拆分窗口移至其自己的选项卡中 |
:g!/{pattern}/d | 删除所有不包含模式的行 |
:noh[lsearch] | 删除搜索匹配项的突出显示 |
>> | 缩进(右移)一行 shiftwidth |
=% | 使用 () 或 {} 重新缩进块(光标位于括号上) |
qa | 录制宏a |
x | 删除(剪切)字符 |
:ccl[ose] | 关闭快速修复窗口 |
dw | 删除(剪切)从光标位置到下一个单词开头的单词字符 |
N | 以相反方向重复搜索 |
:%s/old/new/gc | :%s/old/new/gc - 将整个文件中的所有旧内容替换为新内容并确认 |
:cp[revious] | 跳转到上一个匹配项 |
:vim[grep] /pattern/ {`{file}`} | :vim[grep] /pattern/ {`{file}`} - 在多个文件中搜索模式 |
/pattern | 搜索模式 |
>at | 使用 <> 标签缩进块 |
gP | 将 (粘贴) 放在光标前并将光标留在新文本后 |
P | 把 (粘贴) 放在光标前 |
d$ D | 删除(剪切)至行尾 |
:tabo[nly] | 关闭除当前标签之外的所有标签 |
daw | 删除(剪切)光标下的单词及其后或前的空格 |
diw | 删除(剪切)光标下的单词 |
q | 停止录制宏 |
:%s/old/new/g | :%s/old/new/g - 将整个文件中的所有旧内容替换为新内容 |
:tabnew :tabnew {page.words.file} | :tabnew 或 :tabnew {page.words.file} - 在新选项卡中打开文件 |
3== | 重新缩进 3 行 |
<< | 取消缩进(向左移动)一行 shiftwidth |
:tabc[lose] | 关闭当前选项卡及其所有窗口 |
2dd | 删除(剪切)2 行 |
:cn[ext] | 跳至下一场比赛 |
dd | 删除(剪掉)一行 |
gp | 将剪贴板内容放在(粘贴)光标后,并将光标放在新文本后 |
gt :tabn[ext] | 移至下一个标签 |
yiw | 复制(拉)光标下的单词 |
gg=G | 重新缩进整个缓冲区 |
gT :tabp[revious] | 移至上一个标签 |
=iB | 使用 {} 重新缩进内部块 |
\vpattern | “非常神奇”的模式:非字母数字字符被解释为特殊的正则表达式符号(无需转义) |
:tabm[ove] # | 将当前标签移动到第 # 个位置(从 0 开始索引) |
:g/{pattern}/d | 删除所有包含模式的行 |
?pattern | 向后搜索模式 |
#gt | 移至标签号 # |
:w !sudo tee % | 使用 sudo 写出当前文件 |
<% | 使用 () 或 {} 取消缩进块(光标位于括号上) |
:wq :x ZZ | 写入(保存)并退出 |
:wqa | 在所有选项卡上写入(保存)并退出 |
n | 在同一方向重复搜索 |
2yy | 复制(拉)2 行 |
:3,5d | 删除从 3 到 5 的行 |
@@ | 重新运行上次运行的宏 |
編輯
Ctrl v | 启动视觉块模式 |
"+p | 从系统剪贴板粘贴寄存器 |
< | 文本左移 |
Ctrl r | 重做 |
y`a | 将文本拖到标记 A 的位置 |
U | 恢复(撤消)最后修改的行 |
o | 移至标记区域的另一端 |
`0 | 回到之前 Vim 退出的位置 |
Ctrl ] | 跳转到光标所在的标签 |
~ | 开关盒 |
ma | 设置标记 A 的当前位置 |
:changes | 变更列表 |
"+y | 拉入系统剪贴板寄存器 |
. | 重复上一个命令 |
aB | 带有 {} 的块 |
J | 将下一行连接到当前行,中间留一个空格 |
> | 文本右移 |
cw ce | 更改(替换)至单词的末尾 |
s | 删除字符并替换文本(与 cl 相同) |
gu | 更改为小写直至动作 |
:reg[isters] | 显示寄存器内容 |
:marks | 商标清单 |
"xp | 粘贴寄存器 x 的内容 |
Ctrl o | 转到跳转列表中较早的位置 |
u | 撤消 |
g; | 转到变更列表中较旧的位置 |
gJ | 将下一行连接到当前行,中间无空格 |
gU | 更改为大写直至动作 |
`. | 转到此文件最后一次修改的位置 |
at | 带有 <> 标签的块 |
c$ C | 更改(替换)至行尾 |
S | 删除行并替换文本(与 cc 相同) |
`` | 转到最后一次跳跃之前的位置 |
V | 启动逐行视觉模式 |
d | 删除标记的文本 |
ciw | 改变(替换)整个单词 |
it | 带有 <> 标签的内部块 |
aw | 标记一个单词 |
g~ | 切换案例至运动 |
ib | 内部块带有 () |
u | 将标记的文本更改为小写 |
gwip | 重排段落 |
g, | 转到变更列表中的较新位置 |
`a | 跳转到标记A的位置 |
U | 将标记的文本更改为大写 |
xp | 调换两个字母(删除并粘贴) |
R ESC | 替换多个字符,直到按下 ESC 键。 |
y | 复制标记的文本 |
:ju[mps] | 跳转列表 |
`" | 转到上次编辑此文件的位置 |
O | 移至街区的另一个角落 |
"xy | 复制到寄存器 x |
v | 启动可视模式,标记行,然后执行命令(如 y-yank) |
ab | 带有 () 的块 |
iB | 带有 {} 的内部块 |
cc | 更改(替换)整行 |
r | 替换单个字符。 |
Ctrl i | 转到跳转列表中较新的位置 |
Esc Ctrl c | 退出视觉模式 |
差异
:diffo[ff] | 关闭当前窗口的差异模式 |
zf | 手动定义折叠动作 |
:diffthis | 使当前窗口成为 diff 的一部分 |
[c | 跳转到上一个修改的开始 |
do :diffg[et] | 获取(得到)差异(从其他缓冲区) |
zm | 将所有折叠进一步折叠一层 |
za | 切换光标下的折叠 |
zc | 关闭光标下的折叠 |
zi | 切换折叠功能 |
:dif[fupdate] | 更新差异 |
dp :diffpu[t] | 把差异(放到其他缓冲区) |
zr | 将所有折叠减少(打开)一级 |
]c | 跳至下一个更改的开始 |
zo | 打开光标下的折叠 |
zd | 删除光标下的折叠 |
处理多个文件
:b[uffer]# | 通过索引进入缓冲区 |
:b[uffer] file | 通过文件进入缓冲区 |
:bp[revious] | :bp[revious] - 转到上一个缓冲区 |
Ctrl wl | 将光标移至右侧窗口(垂直分割) |
:vert[ical] ba[ll] | 将所有缓冲区编辑为垂直窗口 |
Ctrl ww | 切换窗口 |
Ctrl wq | 退出窗口 |
Ctrl wk | 将光标移动到上方窗口(水平分割) |
Ctrl wv | 垂直分割窗口 |
:ls :buffers | 列出所有打开的缓冲区 |
:bn[ext] | :bn[ext] - 转到下一个缓冲区 |
Ctrl wL | 使当前窗口在最右侧达到最大高度(最右边的垂直窗口) |
:sp[lit] file | 在新缓冲区和拆分窗口中打开文件 |
Ctrl wH | 使当前窗口在最左边达到最大高度(最左边的垂直窗口) |
Ctrl wJ | 使当前窗口在最底部占据整个宽度(最底部的水平窗口) |
Ctrl ws | 分割窗口 |
:vs[plit] file | 在新缓冲区中打开文件并垂直分割窗口 |
Ctrl w= | 使所有窗口的高度和宽度相等 |
:e[dit] file | 在新缓冲区中编辑文件 |
Ctrl wj | 将光标移至下面的窗口(水平分割) |
Ctrl wh | 将光标移至左侧窗口(垂直分割) |
Ctrl wx | 交换当前窗口和下一个窗口 |
:tab ba[ll] | 将所有缓冲区编辑为标签 |
Ctrl wK | 使当前窗口在最顶部占满整个宽度(最顶部的水平窗口) |
:bd[elete] | 删除缓冲区(关闭文件) |