一、什么是Vim

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。

二、Vim键位图

三、Vim的三种模式

Vim 有三种模式,分别是命令模式输入模式编辑模式,这 3 种工作模式可随意切换。

1、命令模式

当我们用Vim 编辑文件时,默认处于命令模式。此模式下,敲击键盘动作会被识别为命令,而非输入字符,可使用方向键(↑、↓、←、→)或 k、j、h、i 移动光标的位置。

命令模式下常用的几个命令:

命令功能描述
i切换到输入模式,可以输入字符
x删除当前光标所在处的字符
:切换到编辑模式,可以底部光标闪烁处输入命令

2、输入模式

在命令模式下按 i 键进入输入模式,按 Esc 键即可返回命令模式。

在输入模式下,Vim 可以对文件执行写操作,按键及功能描述见下表。

按键功能描述
i在当前光标所在位置插入随后输入的文本
I相当于光标移动到行首,再执行 i 命令
o在光标所在行的下面插入新的一行
O在光标所在行的上面插入新的一行
a在当前光标所在位置之后插入随后输入的文本
A相当于光标移动到行尾,再执行a命令
Enter回车键,换行
Backspace删除光标前一个字符
Delete删除光标后一个字符
Home/End移动光标到行首/行尾
Page Up/Page Down上/下翻页
Esc退出输入模式,切换到命令模式

3、编辑模式

在命令模式下按下**:**(英文冒号),进入编辑模式。

编辑模式可以输入单个或多个字符的命令,可用的命令非常多。在后面使用实例中会做介绍。

按ESC键可随时退出编辑模式。


四、Vim 使用实例

1、打开文件

打开一个自己编写的文件,默认进入命令模式:

[root@wayne:~]# vim myvim.txt

image-20230309162950054

文件的下方会显示文件的一些信息,包括文件的总行数和字符数,以及当前光标所在的位置等。

2、编辑文件

在命令模式之中,按下 i, o, a 中的任意一个字符进入输入模式,此时左下角状态栏中会出现 –INSERT- 的字样。

Vim 插入文本

在输入模式中,除了 Esc 键之外,其他的按键都可以视作为一般的输入按键。

image-20230309165424079

Vim 查找文本

快捷键功能描述
/abc从光标所在位置向前查找字符串 abc
/^abc查找以 abc 为行首的行
/abc$查找以 abc 为行尾的行
?abc从光标所在为主向后查找字符串 abc
n向同一方向重复上次的查找指令
N向相反方向重复上次的查找指定

如查找字符串 “new”

image-20230309165809043

Vim 替换文本

快捷键功能描述
:s/old/new用new替换当前行第一个old
:s/a1/a2/g将当前光标所在行中的所有 a1 用 a2 替换
:n1,n2s/a1/a2/g将文件中 n1 到 n2 行中所有 a1 都用 a2 替换
:%s/a1/a2/g将文件中所有的 a1 都用 a2 替换
:%s/^/xxx/g在每一行的行首插入xxx,^表示行首
:%s//xxx/g−在每一行的行尾插入xxx,/xxx/g在每一行的行尾插入xxx,表示行尾

如替换”new” 为 ”old ”

image-20230309170722205

Vim 删除文本

快捷键功能描述
x删除光标所在位置的字符
dd删除光标所在行
ndd删除当前行(包括此行)后 n 行文本
dG删除光标所在行一直到文件末尾的所有内容
D删除光标位置到行尾的内容
:a1,a2d函数从 a1 行到 a2 行的文本内容

如按dd删除第3行

image-20230309174510739

Vim 复制粘贴文本

快捷键功能描述
p将剪贴板中的内容粘贴到光标后
P(大写)将剪贴板中的内容粘贴到光标前
y复制已选中的文本到剪贴板
yy将光标所在行复制到剪贴板,此命令前可以加数字 n,可复制多行
yw将光标位置的单词复制到剪贴板

如先按yy,复制第3行,再按p粘贴

image-20230309174623476

3、保存退出

输入模式是不可以直接切换到编辑模式的,需要先按下 Esc键回到命令模式,此时左下角的 – INSERT – 会消失。再按下**:**(英文冒号),进入编辑模式。

命令功能描述
:wq保存并退出 Vim 编辑器
:wq!保存并强制退出 Vim 编辑器
:q不保存就退出 Vim 编辑器
:q!不保存,且强制退出 Vim 编辑器
:w保存但是不退出 Vim 编辑器
:w!强制保存文本
:w filename另存到 filename 文件
x!保存文本,并退出 Vim 编辑器
ZZ直接退出 Vim 编辑器

五、Vim 其他按键说明

快捷键功能描述
:set nu显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu与 set nu 相反,为取消行号!
[Ctrl] + [f]屏幕『向下』移动一页,相当于 [Page Down]按键 (常用)
[Ctrl] + [b]屏幕『向上』移动一页,相当于 [Page Up] 按键 (常用)
[Ctrl] + [d]屏幕『向下』移动半页
[Ctrl] + [u]屏幕『向上』移动半页
+光标移动到非空格符的下一行
-光标移动到非空格符的上一行
0 或功能键[Home]这是数字『 0 』:移动到这一行的最前面字符处 (常用)
$ 或功能键[End]移动到这一行的最后面字符处(常用)
H光标移动到这个屏幕的最上方那一行的第一个字符
M光标移动到这个屏幕的中央那一行的第一个字符
L光标移动到这个屏幕的最下方那一行的第一个字符
G移动到这个档案的最后一行
nGn 为数字。移动到这个档案的第 n 行
gg移动到这个档案的第一行,相当于 1G 命令
u撤销前一个动作(常用)
[Ctrl]+[r]恢复上一个动作(常用)
.重复前一个动作 (常用)

以上,如果觉得对你有帮助,点个赞再走吧,这样@知微之见也有更新下去的动力!

也欢迎私信我,一起交流!

作者:|知微之见|,原文链接: http://www.imooc.com/article/334491

文章推荐

Java 泛型:理解和应用

vue自定义组件——search-box

KMeans算法与GMM混合高斯聚类

Java 框架面试题-Spring Boot自定义配置与自动配置共存

Go语言:通过TDD驱动测试开发为同事写的程序优化提速——初次...

Docker-web项目部署

【单元测试】Junit 4(八)--junit4 内置Rule

【JAVA】JDK11新特性个人分析

Linux进程与线程的基本概念及区别

ModStart: 宝塔配置 MySQL 队列调度

3000帧动画图解MySQL为什么需要binlog、redo log和undo log

PostgreSQL 的窗口函数 OVER, WINDOW, PARTITION BY, RANGE