# vim 命令
vim是一个编辑器,常用语Linux环境下的文本编辑。vim有不同的模式,在不同的模式下,输入对应的指令,才能做对应的操作。vim的模式在编辑器的左下角
进入vim,退出vim
- 进入vim后为normal模式,无法输入文字
// 进入vim
vim
// 打开文件
vim test.txt
// 退出vim
:q
1
2
3
4
5
6
2
3
4
5
6
# 1、vim模式
- normal模式,普通模式可以进行各种操作和移动
- 编辑模式,编辑内容,esc退出编辑模式
- 命令模式,输入:后执行命令
- 可视化模式
# 2、normal模式
快速移动
- 在normal模式下,移动光标
左移动 —— h
右移动 —— l
上移动 —— k
下移动 —— j
1
2
3
4
2
3
4
- 水平移动
0 —— 移动到首行第一个字符
^ —— 移动到第一个非空白字符
$ —— 移动到行尾
g_ —— 移动到行尾非空白字符
1
2
3
4
2
3
4
- 垂直移动
在句子和段落之间移动
() —— 在句子间移动
{} —— 在段落间移动
1
2
2
使用easy-motion插件,不用记忆
- 在单词间移动光标
跳转到下一单词开头 —— w
跳转到下一单词结尾 —— e
返回到上一个单词的开头 —— b
跳转到空格后面的单词开头 —— W
跳转到空格后面的单词结尾 —— E
返回到空格前面的单词开头 —— B
1
2
3
4
5
6
2
3
4
5
6
- 行间搜索移动
跳转到搜索的字符上(向后) —— f + 待查找字符,如fvar,跳转到var
跳转到查找字符的前一个字符 —— t + 待查找字符
上一个搜索结果 —— ,
下一个搜索结果 —— ;
跳转到搜索的字符上(向前) —— F + 待查找字符,如Fvar,跳转到var
跳转到查找字符的前一个字符(向前) —— T + 待查找字符
1
2
3
4
5
6
2
3
4
5
6
- 页面移动
gg —— 快速移动到文件开头
G —— 快速移动到文件结尾
H —— 跳转到屏幕的开头,Head
M —— 跳转到屏幕的中间,Middle
L —— 跳转到屏幕的结尾,Lower
ctrl + u/f —— 上下翻页
ctrl + o —— 移动到上一个位置
zz —— 把当前行屏幕移动到中间
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
复制粘贴
y —— yank,表示复制
p —— put,表示粘贴
// 举例
yiw 复制一个单词
yy 复制一行(dd删除一行)
用visual选中块,然后p粘贴
1
2
3
4
5
6
7
2
3
4
5
6
7
# 3、编辑(Insert)模式
- 进入编辑模式,输入i(insert)、a(append)或o(open a line below),回车后可以输入文字,i和a在光标后面插入,输入o后会新建空行
- 按esc回到normal模式
- 输入:wq保存并退出
// 不同输入对应含义
i —— insert
a —— append
o —— open a line below
I —— append before line,行首插入
A —— append after line,行尾插入
O —— open a line above,在上一行插入空白行
1
2
3
4
5
6
7
2
3
4
5
6
7
删除快捷键
Ctrl + h —— 删除上一个字符
Ctrl + w —— 删除上一个单词
Ctrl + u —— 删除当前行
// 以下在nomal模式下
x —— 快速删除一个字符
dw —— 删除单词
daw —— 删除单词加空格
dd —— 删除行
d$ —— 删除光标到行尾的字符
d0 —— 删除光标到行首的字符
数字+命令 —— 配合使用,2x删除两个字符,3dd删除3行
d —— 配合visual模式 + d,实现整块删除
dt + 字符 —— 表示删除光标到字符间的内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
快速修改
// normal模式
r —— replace,替换一个字符,如rf表示将当前光标的字符替换为f,仅可替换一个字符
s —— substitute,替换并插入,删除当前字符,进入插入模式,可以插入多个字符
数字(n) + s —— 删除n个字符进入插入模式
c —— change,删除并替换
cw —— 将当前单词删除,然后进入插入模式
caw —— 将当前单词(加空格)删除,然后进入插入模式
R —— 依次替换后续单个字符
S —— 整行删除,进入插入模式
C —— 删除整行,进入插入模式
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
快速查询
/或? —— 进行前项或后项搜索,如输入/res,然后回车,光标会移动到res的位置
n/N —— 跳转到下一个或上一个匹配
*或# —— 向前或向后匹配
1
2
3
2
3
搜索替换
:[range]s/{pattern}/{string}/[flags]
range —— 表示搜索范围,如:10, 20表示10行到20行之间搜索,%表示全部范围
pattern —— 表示替换的模式
string —— 表示替换后的文本
flags —— 替换的标志,
g(global)表示全局范围内执行
c(confirm)表示替换前是否需要确认
n(number)显示匹配的次数,但不替换
// 举例
:% s/self/this/g 表示全局将self替换为this
:2,10 s/self/this/g 表示将2-10行的self替换为this
:2,10 s/self//n 表示统计2-10行的self个数
:2,10 s/正则表达式/替换的值/g 表示用正则进行替换
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
复制粘贴
Ctrl + v 或 Command + v
// 缩进不对的话用:set paste或:set nopaste来解决
1
2
2
test object
[num][command][text object]
num —— 表示次数
command —— 表示命令
d —— delete,删除
c —— change,替换
y —— yangk,复制
v —— 表示visual,选择
text object —— 文本对象
w —— word,单词
s —— sentence,句子
p —— paragraph,段落
// 举例
3dw 表示删除3个单词
viw 选中单词
vaw 选中单词 + 空格
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
快速切换normal模式和编辑模式
- esc
- Ctrl + c(可能会中断某些插件)
- Ctrl + [
- gi:快速跳转到最后一次编辑的地方,并进入编辑模式
Linux终端常用快捷键
// 删除上一个字符
Ctrl + h
// 删除上一个单词
Ctrl + w
// 删除当前行
Ctrl + u
// 快速移动到行首
Ctrl + a
// 快速移动到行尾
Ctrl + e
// 向前移动光标
Ctrl + B
// 向后移动光标
Ctrl + F
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
# 4、命令(Cmd)模式
- 保存退出:wq
- 分屏 :vs(vertical screen,垂直分屏)、:sp(split,水平分屏),常用于多文件同时编辑
- 替换: % s/foo/bar/g
- 查看帮助文档:help
- 高亮:set hls
- 设置行号:set nu
# 5、可视化(Visual)模式
用于块状文本选择
- 在normal模式下,将光标移动到选中文字起始位置
- 输入v进入visual模式,选择文本块
- 输入V选择文本行
# 6、vim 寄存器
- vim 里操作的是寄存器,而非剪切板
- 在vim的复制或删除的内容都存在寄存器中
- 被删除或复制的内容可以直接用于粘贴