按键 说明
o 在当前行的下一行进入插入模式
O 在当前行的前面进入插入模式
:s :{作用范围}s/{目标}/{替换}/{替换标志} :%s/false/true/g 在全局范围内把所有 false 替换为 true
v + h/j/k/l visual 可视模式下通过方向键 h/j/k/l 进行文本的选取
vim -p 文件 1 2 … 使用 -p 参数打开多标签页
gt / gT normal 模式下打开某一标签页,gt 下一标签页 | gT 上一标签页
dw 删除到下一个单词开头
de 删除到本单词末尾
dE 删除到本单词末尾包括标点在内
db 删除到前一个单词
dB 删除到前一个单词包括标点在内
dd 删除一整行
D d$ 删除光标位置到本行结尾
d0 删除光标位置到本行开头

下面是难难的 Vim 笔记:

移动

hjkl 移动
fx 移动到下一个字母
tx 移动到 x 的左边位置
Fx 往回
Tx 往回移动到 x 的右边一个位置
; 重复上一个命令
b 往前移动一个词
w 往后移动一个词
0 移动到首行
^ 行首
$ 行尾
)( 移动光标到下上一个句子
ctrl f 向下移动一屏
ctrl d 下 半
ctrl b 上 一
ctrl u 上 半
G 到文件尾
numG 移动到指定行
gg 文件首
H 移动光标到屏幕上面
M 中间
L 下面
/text 搜索 n 下 N 上
% 成对括号间移动
zz 将当前行置于屏幕中间
zt 顶端
zb 底端
ctrl e 光标不动,屏幕上移
ctrl y 下移

输入

ctrl n 自己补全
i 当前字符的左边插入
I 当前行首插入
a 当前字符的右边插入
A 当前行尾插入
o 当前行下面插入新行
O 当前行上面插入新行
c {mo} 删除 motion 命令跨过的字符,并且进入插入模式。比如:c$,这将会删除从光标位置到行尾的字符并且进入插入模式。ct!,这会删除从光标位置到下一个叹号(但不包括),然后进入插入模式。被删除的字符被存在了剪贴板里面,并且可以再粘贴出来
d {mo} 和上面差不多,但是不进入插入模式
v 按字符选择
V 按行选择
ctrl V 按块选择
d 剪切
y 复制
c 剪贴并进入插入模式
d {mo}
y {mo}
c {mo}
dd 剪切当前行
yy 拷贝当前行
cc 剪切当前行并进入插入模式
D 剪切从光标位置到行尾到剪贴板
Y 拷贝当前行
C 和 D 类似,并进入插入模式
x 剪切当前字符到剪贴板
s 和 x 类似,并进入插入模式
p 粘贴
"+p 连接系统剪贴板寄存器粘贴
. 重复上一个命令
数字 数字加命令的组合
u 撤销
ctrl+r 恢复

阅读

{} 跳转

~ 大小写转化或 uU
:s /old/new 当前行中找到的第一个 old 替换为 new
:s /old/new/g 当前行中查找到的所有 old 替换为 new
:#,# s/old/new/g 行号 “#,#” 范围内替换所有的 old 为 new
:% s /old/new/g 整个文件范围内替换所有的 old 为 new
:s /old/new/c c 命令:将对每个替换动作提示用户进行确认
可以不加空格

命令:% s/\s+$//g
可以删除行尾多余的空格和 tab 符号。
命令:% s/ *$//g
/ 和 * 中间有空格,只能删除行尾空格,对于 tab 不能删除

使用 vim 删除多余的空行:
:g/^$/d

mark

ma 标记 a 位置
`a 跳转到 a 位置
'a 跳转到 a 行首
'' 两个位置互跳
ctrl-o 跳到一个较老的地方
ctrl-i 跳到一个较新的地方
' 跳转前的光标位置
'' 最后编辑的光标位置
[ 最后修改的开始位置
] 最后修改的结束位置

cc=S 替换整行
C 替换当前至行尾的内容
D 删除当前到行尾的内容

window

ctrl+w,4,+->< 增高、降低、增宽、减少窗口大小
ctrl+w,= 相等的窗口大小
>> 右缩进,配合 v 使用效果更佳
= 自动缩进
ctrl+[ = esc
设置 jj = esc

command

:!command 执行命令
:r!command 执行的结果插入到当前
:sh 执行一串命令 Ctrl+D 回来

move

fx 移动到当前行 x 字符处
Fx 相当的往左查找

缓冲区

多窗口操作

ctrl+^

定位

* 查找相同单词,可定位到函数定义处
#
gd
ctrl+i/o
ma ''
{}
fx
H/M/L

数字

ctrl+a 增加
ctrl+x 减少

debug

vim --startuptime timefile the_file_you_want_to_edit