插入

命令 说明
i 光标前插入
a 光标后插入
I 当前行首插入
A 当前行尾插入
O 当前行之前插入新行
o 在当前行之后插入新行

光标操作

命令 说明
fx 移动到当前行的下一个x,x可以是一个字符 可以使用 ; 来重复你的上一个 f 命令
FX 移动到当前行的上一个x,x可以是一个字符
w 移动光标到后一个单词
b 移动光标到前一个单词
0 移动光标到当前行首
^ 移动光标到当前第一个字母位置
$ 移动光标到当前行尾
gg 到整个文件的第一行
#gg 或 #G 到整个文件的第#行
G 到整个文件的最后一行
向后移动一屏
向前移动一屏
H 移动光标到屏幕上面
M 移动光标到屏幕中间
L 移动光标到屏幕下面
* 读取光标处的字符串,并且移动光标到后面出现的地方
# 读取光标处的字符串,并且移动光标到前面出现的地方
/text 从光标处开始往下查找text文本,可以使用n查找下一个
?text 从光标处开始往上查找text文本,可以使用n查找上一个
`. 回到你上次编辑文件的地方
ma 在当前光标处标记添加书签a,书签只能是小写
`a 跳到书签a处

复制、粘贴

命令 说明
Y or yy 复制当前行
#yy 复制从光标所在行往下的#行
yw 将光标所在之处到字尾的字符复制
#yw 复制#个字
p 粘贴
l1, l2 co l3 复制第l1行到第l2行之间的内容到第l3行后面

删除

命令 说明
dd 删除光标所在行
#dd 从光标所在行开始删除#行
:l1,l2 d 将l1,l2行之间的内容删除
dgg 删除到首行
dG 删除到尾行
X 删除光标所在位置的前面一个字符
x 删除光标所在位置的后面一个字符
#x 删除光标所在位置后面#个字符
d^ 删除到行首
D or d$ 删除到行尾
dw 删除一个单词/光标之后的单词剩余部分
d#w 删除#个单词
diB 删除{}中的内容
daB 删除{}及其内的内容
:% g/^$/d 删除空行
:% g/pattern/d 删除包含特定字符的行(全局删除匹配行)
:% 1,3g/pattern/d 删除包含特定字符的行(删除第1-3行里的匹配行)
:% v/pattern/d 或
:% g!/pattern/d
删除不包含指定字符的行

多行操作

命令 说明
:%s/^/要添加的内容 在每行行首添加相同的内容
:%s/$/要添加的内容 在每行行尾添加相同的内容
:1,$j 多行转一行
:%j 或者
:%j!(此法不会再行尾添加空格)
多行转一行
:%s/XXX/^M/g 一行转多行,^M为先按ctrl+v,再按ctrl+m出来的,不是字符串^M
:%s/; /;\r/g 一行转多行,;为分隔符
:1,$s/.$// $代表行末或者最后一行。1,$表示全文,也可用%表示。s表示替换, /.$//:正则,把最后一个字符替换为空
:%s/ *$//g 删除行尾空格(注意:/和*中间有一个空格)
:set nu 显示行号
:set nonu 取消显示行号

关键词自动完成

命令 说明
关键词自动完成

常用方法

执行命令

  1. > :w !{cmd}

在vim保存时获得sudo权限

  1. > :w !sudo tee %

在每1000行后添加数据

  1. $ awk '{if(NR%1000==0) {print "aaaaaaa"$0} else print}'

参考

https://linuxtoy.org/archives/efficient-editing-with-vim.html
https://coolshell.cn/articles/5426.html
https://segmentfault.com/q/1010000000151086