VIM
光标移动
h, j, k, l
Ctrl+f=上翻页
Ctrl+b=下翻页
%=跳到匹配的括号
w=跳到单词(标点)开头
W=跳到单词开头
e=跳到单词(标点)结尾
E=跳到单词结尾
b=与w反向(往前跳跃)
B=与W反向(往前跳跃)
0=行首
^=行第一个字符
$=行尾
gg=到达第一行
gd=到达光标所在的函数或变量的定义
[N]G=到达第N行或行尾
fx=移动光标到本行下一个出现字符x的位置
;=重复上一个f命令
tx=类似fx,移动到本行下一个x字符之前的位置
Fx=与fx方向相反
),(=移动光标到下一句,上一句
*=读取游标当前单词,并到达下一个出现处
#=方向与*相反
`.=到达上一个编辑处
屏幕范围
H=移动光标到当前屏幕第一行首
M=移动光标到当前屏幕中间行首
L=移动光标到当前屏幕最后一行行首
书签
ma=在当前光标位置添加书签a
`a=到达书签a
剪切粘贴
dd=删除当前行
dw=删除当前单词
x=删除当前字符
X=删除前一个字符
D=删除到行尾
yy=复制当前行
2yy=复制当前行开始的2行
yw=复制当前单词
y$=复制到行尾
p=粘贴到 当前光标/当前行 之后
P=粘贴到 当前光标/当前行 之前
]p=以适当的缩进粘贴
"a=用注册符a命名下一个复制或粘贴操作
插入模式
i=在光标位置插入
I=在行首插入
a=在光标后插入
A=在行尾插入
o=在光标下方插入一行
O=在光标上方插入一行
Esc=退出插入模式
自动补全(写几个字符然后)
Ctrl-n=下一个自动补全
Ctrl-p=上一个自动补全
编辑
r=替换单个字符(非插入模式)
J=将下一行连接到本行末尾
cc=修改整行
cw=修改单词到结尾
c$=修改到行尾
s=删除当前光标的字符并且插入文本
S=删除光标所在行并插入文本
xp=互换光标和其后的字符位置
ddp=互换光标所在行与其下一行
yyp=创建前行的复本
u=撤销
Ctrl-r=恢复
.=重复最近的命令
~=变换字符大小写
g~iw=变换当前单词的大小写
gUiw=当前单词大写
guiw=当前单词小写
>>=向右缩进(shiftwidth)
<<=向左缩进
===自动缩进
视图模式
标记文本
v=开启视图模式
V=开启行视图模式
Ctrl-v=开启块视图模式
o=移动到标记区块的对角
O=移动到标记区块另一个角(同一行的另一个角)
aw=标记一个单词
ab=标记()的内容
aB=标记{}的内容
ib=标记()内的内容
iB=标记{}内的内容
命令
>=向右移动
<=向左移动
y=复制
d=删除
~=转换大小写
查找替换
/pattern=查找pattern
?pattern=向前查找pattern
n=当前方向重复查找
N=反方向重复查找
:%s/old/new/g=全局用new替换old
:%s/old/new/gc=全局用new替换old,并逐个确认
:n1,n2/old/new/g=n1行到n2行用new替换old
:1,$s/new/old/g=第一行到最后一行用new替换old
:%s:old:new:g=另一种替换方法
退出
:w=保存
:wq=保存退出
:x=保存退出
:q=退出,但未保存会失败
:q!=强制退出
ZZ=若无改动,直接退出;若有改动,保存后退出
:w !sudo tee %=用sudo强制保存
:! command=不退出VIM,在Bash中执行command命令
多文件编辑
:e filename=在新buffer中编辑filename
:bn=下一个buffer
:bd=删除buffer(关闭文件)
:sp fn=在新buffer打开fn文件并水平分隔窗口
:vs fn=在新buffer中打开fn并垂直分隔窗口
Ctrl-w=窗口命令
Ctrl-w s=水平分隔窗口
Ctrl-w w=切换窗口
Ctrl-w q=退出窗口
Ctrl-w v=垂直分隔窗口
Ctrl-w h,j,k,l=上下左右进入窗口
Tab命令
:tabe fn=在新tab中编辑fn文件
gt=下一个tab
gT=上一个Tab
:tabr=第一个Tab
:tabl=最后一个Tab
:tabm[N]=移动当前tab到第N个tab之后
宏
qa=用注册符a开始录制一个宏
q=结束录制
@a=回放注册符a的宏