Vim快捷键备忘录

Vim 是一个高度可配置的文本编辑器,旨在高效地创建和更改任何类型的文本。它作为 "vi" 包含在大多数 UNIX 系统和 Apple OS X 中。

一共有 228 个常用软件的快捷键来自 Vim

全球的

:ter[minal]打开终端窗口
Ctrlb将屏幕向上移动一页(光标到最后一行)
H移至屏幕顶部
gk向上移动光标(多行文本)
Ctrlu将光标和屏幕向上移动 1/2 页
Ctrle将屏幕向下移动一行(不移动光标)
b跳转到单词的开头
:sav[eas] file将文件另存为
O在当前行上方添加(打开)一个新行
$跳至行尾
gE向后跳转到单词的末尾(单词可以包含标点符号)
gd移至本地声明
fx跳转到下一个出现的字符 x
Ctrlj在插入模式下在光标位置添加换行符
5gg5G转到第 5 行
K打开光标下的单词的手册页
,向后重复上一个 f、t、F 或 T 动作
gg转到文档的第一行
Ctrlp在插入模式下,在光标前插入(自动完成)上一个匹配项
Ctrld将光标和屏幕向下移动 1/2 页
W跳转到单词的开头(单词可以包含标点符号)
j向下移动光标
{跳转到上一段(或编辑代码时的功能/块)
a在光标后插入(追加)
ea在单词末尾插入(附加)
k向上移动光标
l向右移动光标
EscCtrlc退出插入模式
tx跳转到下一个字符 x 出现的位置
Ctrlw在插入模式下删除光标前的单词
;重复上一个 f、t、F 或 T 动作
G转到文档的最后一行
zb将光标置于屏幕底部
Fx跳转到字符 x 的上一次出现位置
Ctrlf将屏幕向下移动一页(光标到第一行)
A在行尾插入(追加)
ge跳转到单词末尾
zt将光标置于屏幕顶部
w跳转到单词的开头
e跳转到单词末尾
gD移至全局声明
Ctrlh在插入模式下删除光标前的字符
g_跳转到该行的最后一个非空白字符
Ctrlrx插入寄存器 x 的内容
Ctrln在插入模式下,在光标前插入(自动完成)下一个匹配项
^跳转到该行的第一个非空白字符
L移至屏幕底部
M移至屏幕中间
:clo[se]关闭当前窗格
:h[elp] keyword打开关键字帮助
0跳转到行首
%将光标移动到匹配的字符(默认支持对:“()”、“{}”、“[]”
o在当前行下方添加(打开)一个新行
zz屏幕中心光标
B向后跳转到单词的开头(单词可以包含标点符号)
i在光标前插入
Tx跳转到上一次出现字符 x 之后
}跳转到下一段(或编辑代码时的功能/块)
Ctrlt插入模式下缩进(向右移动)一行 shiftwidth
Ctrld在插入模式下取消缩进(向左移动)行一个 shiftwidth
h向左移动光标
gj向下移动光标(多行文本)
E跳转到单词的末尾(单词可以包含标点符号)
I插入到行首
Ctrlox暂时进入正常模式发出一个正常模式命令x。
Ctrly将屏幕向上移动一行(不移动光标)

>ib用 () 缩进内部块
@a运行宏a
:tabdo在所有选项卡上运行命令(例如:tabdo q
:q!ZQ退出并丢弃未保存的更改
:w写入(保存)文件,但不退出
p将剪贴板内容粘贴到光标后面
yaw拉出(复制)光标下的单词以及其后或前的空格
>%使用 () 或 {} 缩进块(光标位于括号上)
]p粘贴并调整缩进至当前行
yw将单词的字符从光标位置复制到下一个单词的开头
yy复制一行
y$Y复制(拉)至行末
:cope[n]打开一个包含比赛列表的窗口
:q退出(如果有未保存的更改则失败)
CtrlwT将当前拆分窗口移至其自己的选项卡中
: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:xZZ写入(保存)并退出
:wqa在所有选项卡上写入(保存)并退出
n在同一方向重复搜索
2yy复制(拉)2 行
:3,5d删除从 3 到 5 的行
@@重新运行上次运行的宏

編輯

Ctrlv启动视觉块模式
"+p从系统剪贴板粘贴寄存器
<文本左移
Ctrlr重做
y`a将文本拖到标记 A 的位置
U恢复(撤消)最后修改的行
o移至标记区域的另一端
`0回到之前 Vim 退出的位置
Ctrl]跳转到光标所在的标签
~开关盒
ma设置标记 A 的当前位置
:changes变更列表
"+y拉入系统剪贴板寄存器
.重复上一个命令
aB带有 {} 的块
J将下一行连接到当前行,中间留一个空格
>文本右移
cwce更改(替换)至单词的末尾
s删除字符并替换文本(与 cl 相同)
gu更改为小写直至动作
:reg[isters]显示寄存器内容
:marks商标清单
"xp粘贴寄存器 x 的内容
Ctrlo转到跳转列表中较早的位置
u撤消
g;转到变更列表中较旧的位置
gJ将下一行连接到当前行,中间无空格
gU更改为大写直至动作
`.转到此文件最后一次修改的位置
at带有 &lt;&gt; 标签的块
c$C更改(替换)至行尾
S删除行并替换文本(与 cc 相同)
``转到最后一次跳跃之前的位置
V启动逐行视觉模式
d删除标记的文本
ciw改变(替换)整个单词
it带有 &lt;&gt; 标签的内部块
aw标记一个单词
g~切换案例至运动
ib内部块带有 ()
u将标记的文本更改为小写
gwip重排段落
g,转到变更列表中的较新位置
`a跳转到标记A的位置
U将标记的文本更改为大写
xp调换两个字母(删除并粘贴)
RESC替换多个字符,直到按下 ESC 键。
y复制标记的文本
:ju[mps]跳转列表
`"转到上次编辑此文件的位置
O移至街区的另一个角落
"xy复制到寄存器 x
v启动可视模式,标记行,然后执行命令(如 y-yank)
ab带有 () 的块
iB带有 {} 的内部块
cc更改(替换)整行
r替换单个字符。
Ctrli转到跳转列表中较新的位置
EscCtrlc退出视觉模式

差异

: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] - 转到上一个缓冲区
Ctrlwl将光标移至右侧窗口(垂直分割)
:vert[ical] ba[ll]将所有缓冲区编辑为垂直窗口
Ctrlww切换窗口
Ctrlwq退出窗口
Ctrlwk将光标移动到上方窗口(水平分割)
Ctrlwv垂直分割窗口
:ls:buffers列出所有打开的缓冲区
:bn[ext]:bn[ext] - 转到下一个缓冲区
CtrlwL使当前窗口在最右侧达到最大高度(最右边的垂直窗口)
:sp[lit] file在新缓冲区和拆分窗口中打开文件
CtrlwH使当前窗口在最左边达到最大高度(最左边的垂直窗口)
CtrlwJ使当前窗口在最底部占据整个宽度(最底部的水平窗口)
Ctrlws分割窗口
:vs[plit] file在新缓冲区中打开文件并垂直分割窗口
Ctrlw=使所有窗口的高度和宽度相等
:e[dit] file在新缓冲区中编辑文件
Ctrlwj将光标移至下面的窗口(水平分割)
Ctrlwh将光标移至左侧窗口(垂直分割)
Ctrlwx交换当前窗口和下一个窗口
:tab ba[ll]将所有缓冲区编辑为标签
CtrlwK使当前窗口在最顶部占满整个宽度(最顶部的水平窗口)
:bd[elete]删除缓冲区(关闭文件)

常见问题