下文出现的所有类似Ctrl+a或者n>>这种形式的命令都代表快捷键操作;如果是底线命令都加了:
移动光标
- 基本操作
h j k l
左 下 上 右
- 高级操作
按键 | 含义 |
---|---|
0 | 将光标定位到行首的位置 |
^ | 将光标定位到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等) |
$ | 将光标定位到行尾的位置 |
g_ | 将光标定位到本行最后一个不是blank字符的位置 |
b | 将光标定位到光标所在单词的起始处 |
e | 将光标定位到光标所在单词的结尾处 |
w | 将光标定位到下一个单词的起始处(注意,是光标所在单词的下一个单词) |
gg | 将光标定位到文件的开头 |
G | 将光标定位到文件的末尾 |
这里几乎所有的移动光标的前面都可以加数字,代表重复多少次,还有很多命令都可以这么做,自行探索哈哈
模式分类
VIM 具有6种基本模式和5种派生模式。
基本模式:
普通模式
插入模式
可视模式
底线命令行模式
- 选择模式
- Ex 模式
派生模式:
- 操作符等待模式
- 插入普通模式
- 插入可视模式
- 插入选择模式
- 替换模式
常用模式
- 进入插入模式
按键 | 含义 |
---|---|
i | 在光标的前边进入插入模式 |
I | 在光标所在行的行首进入插入模式 |
a | 在光标的后边进入插入模式 |
A | 在光标所在行的行尾进入插入模式 |
o | 在光标所在行的下方插入空行并进入插入模式 |
O | 在光标所在行的上方插入空行并进入插入模式 |
s | 删除光标指定的字符并进入插入模式 |
S | 将光标所在行清除并进入插入模式 |
- 退出插入模式(按键)
Esc
- 进去底线命令模式(插入模式不可进入)
:
保存退出文件
# 方式1(底线命令模式)
:wq
# 方式2(快捷键)
Shift+Z+Z
删除命令
- 删除当前光标下的字符用x
x
- 删除更多字符
# d 操作次数 操作范围的指令
d [n] motion
按键 | 含义 |
---|---|
d0 | 删除光标从当前位置(不包含)到该行行首的所有字符 |
d^ | 删除光标从当前位置(不包含)到本行第一个不是blank字符位置处的字符 |
d$ | 删除从光标当前位置(包含)到该行行尾的所有字符 |
dg_ | 删除从光标当前位置(包含)到该行行尾最后一个不是blank字符位置处的所有字符 |
db | 删除从光标当前位置(不包含)到单词起始处的所有字符 |
de | 删除从光标当前位置(包含)到单词结尾处的所有字符 |
dw | 删除从光标当前位置(包含)到下个单词起始处的所有字符 |
dh | 删除光标前面一个字符 |
dl | 删除光标指定的字符 |
dj | 删除光标所在行以及下一行的所有字符 |
dk | 删除光标所在行以及上一行的所有字符 |
dd | 删除光标所在行的所有字符 |
dgg | 删除光标所在行(包含)到文件开头的所有字符 |
dG | 删除光标所在行(包含)到文件末尾的所有字符 |
这上面所有的“删除”操作并不是真的删除,它们事实上是存放在 VIM 的一个缓冲区(VIM 把它称之为寄存器)中,相当于 Windows 的剪切功能。
修改命令
跟删除完全相同,只是把d换成c,并且修改会自动进入插入模式,我们可以理解成修改 = 删除 + 进入插入模式
。
- 例如:删除本行并进入插入模式
cc
复制和粘贴
- 复制多个字符
# y 操作次数 操作范围的指令
y [n] motion
- 复制当前行字符
yy
其他motion其实跟之前删除是一样的
- 粘贴到光标之后
p
- 粘贴到光标之前
P
注意:如果你需要粘贴的是整行为单位,那么 p 命令将在光标的下一行开始粘贴;如果你拷贝的是非整行的局部字符串,那么 p 命令将在光标后开始粘贴。
撤销与恢复
- 撤销最后一次修改
u
- 撤销对当前行的修改
U
- 恢复上次撤销的内容
Ctrl+r
文件信息
- 查看文件信息,在最下面显示当前文件和光标的信息
Ctrl+g
- 跳转到第n行
# 方式1
nG
# 方式2
:n
- 跳转括号
# 将光标定位到括号的其中一半上,按下光标会跳转到另一半括号上
%
缩进
- 缩进n行
n>>
- 反缩进n行
n<<
- 反缩进n行
n<<
- 结合可视模式进行缩进
# step1:进入可视模式通过移动光标选择
v
# step2:缩进
>
<
搜索命令
- 向后搜索(默认从当前光标开始向后搜索)
# 开启搜索
/关键字
# 向后搜索
n
# 向前搜索
N
- 向前搜索(默认从当前光标开始向前搜索)
# 开启搜索
?关键字
# 向前搜索
n
# 向后搜索
N
- 去除高亮
:nohl
- 十个特殊字符有特殊含义,需要先转义再搜索
.
*
[
]
^
%
/
?
~
$
# 转义(前面加\)
\特殊字符
替换命令
方式1:替换模式
- 替换当前光标下字符
r+替换字符
- 替换多个字符
# step1:进入替换模式,左下角出现 replace
R
# step2:替换
输入替换字符
方式2:底线命令行模式
一般在搜索后进行替换
- 把光标所在行的第一个符合条件的字符替换
:s/被替换字符/替换字符
- 把光标所在行的所有符合条件的字符替换
:s/被替换字符/替换字符/g
- 把整个文件的所有符合条件的字符替换
:%s/被替换字符/替换字符/g
- 把文件局部(2-10行)的所有符合条件的字符替换
:2,10s/被替换字符/替换字符/g
- 把整个文件的所有符合条件的字符替换,逐步询问替换
:%s/被替换字符/替换字符/gc
# 会逐步询问
替换为 替换字符 (y/n/a/q/l/^E/^Y)?
y -- 替换
n -- 不替换
a -- 替换所有
q -- 放弃替换
l -- 替换一个并进入插入模式
^E -- Ctrl + E 滚动屏幕
^Y -- Ctrl + Y 滚动屏幕
文件命令
- 文件另存为
:w 文件名
- 强制另存为(已经存在同名文件,覆盖)
:w! 文件名
- 局部内容另存为
# step1:进入可视模式通过移动光标选择
v
# step2:另存
:w 文件名
- 合并文件(读取文件并植入到光标的下一行位置)
:r 文件名
- 同时打开多个文件(打开文件时操作)
# 垂直并排
vi -o 文件名1 文件名2 ...
# 水平并排
vi -O 文件名1 文件名2 ...
# 切换文件
Ctrl + w + w
# 垂直并排切换
Ctrl + w + 上/下
# 水平并排切换
Ctrl + w + 左/右
# 退出保存全部,在之前的基础上加 a
:qa
:wa
:q!a
:w!a
:wqa
执行shell命令
:! shell命令