1991 年,来自荷兰的一名工程师 Bram Moolenaar 为了在他的Amiga计算机上复制Vi的功能,正式发布 了Vim的第一个版本。在当时无论谁也没想到,这款软件未来能在技术圈爆发出那么大的威力,为千千万万的工程师节省了无数时间,大幅提升他们的开发效率。
从Vi衍生出来的Vim有着不同于大多数编辑器的使用方式:通过键盘对多种模式的相互切换,进行各项命令的执行和对文本的编写。这种方式使得Vim可以不用进行菜单或者鼠标操作,并且最小化组合键的操作。对文字录入员或者程序员可以大大增强速度和效率。
接下来我们将开始对Vim的学习。
1、Vim模式介绍
Vim具有6种基本模式和5种派生模式,我们将只简单介绍下6种基本模式:
- 普通模式(Normal mode)(常用) 在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim启动后的默认模式。这正好和许多新用户期待的操作方式相反(大多数编辑器默认模式为插入模式)。
- 插入模式(Insert mode)(常用) 在这个模式中,大多数按键都会向文本缓冲中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。 在插入模式中,可以按ESC键回到普通模式。
- 可视模式(Visual mode) 这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim的"文本对象"也能和移动命令一样用在这个模式中。
- 选择模式(Select mode) 这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim会用这个字符替换选择的高亮文本块,并且自动进入插入模式。
- 命令行模式(Command line mode)(常用) 在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(:键),搜索(/和?键)或者过滤命令(!键)。在命令执行之后,Vim返回到命令行模式之前的模式,通常是普通模式。
- Ex模式(Ex mode) 这和命令行模式比较相似,在使用:visual命令离开Ex模式前,可以一次执行多条命令。
六种基本模式中以普通、插入和命令行三种模式最为常用,因为这三种模式的相互配合即可完成基本的编辑功能(普通模式:对文本进行复制、粘贴、删除、撤销等操作;插入模式:编写文本内容;命令行模式:保存、退出文档,以及设置编辑环境)。
vim启动进入普通模式后,可通过按i键(插入)或a键(附加)进入插入模式,通过:键进入命令行模式。而当Vim处于插入模式或者命令行模式,均可以用过按Esc键或者Ctrl [回到普通模式。
2、Vim的进出与游标移动
2.1、Vim的打开
使用vim命令进入vim界面,命令格式如下
代码语言:javascript复制vim 文件名
默认条件下为当前路径下的相应文件,如果文件不存在将新建文本后打开Vim。
2.2、游标移动与跳转
在普通模式下,使用方向键或者反人类的h、j、k、l键可以移动游标,并通过w、b、e等键进行游标的跳转,具体内容参见下表:
按键 | 说明 |
---|---|
nG(n Shift g) | 游标移动到第n行(行间跳转) |
gg | 游标移动到第一行(行间跳转) |
G(Shift g) | 游标移动到最后一行(行间跳转) |
b | 到前一个单词的开头 |
w | 到下一个单词的开头 |
e | 到当前单词的结尾 |
ge | 到前一个单词的结尾 |
0或^ | 到行头 |
$ | 到行尾 |
f<字母> | 向后搜索<字母>并跳转到第一个匹配的位置(很实用) |
F<字母> | 向前搜索<字母>并跳转到第一个匹配的位置(实用) |
t<字母> | 向后搜索<字母>并跳转到第一个匹配的位置之前的一个字母(不常用) |
T<字母> | 向前搜索<字母>并跳转到第一个匹配的位置之后的一个字母(不常用) |
注:在命令行模式下,可通过输入:set nu以显示行号
2.3、Vim的退出与保存
2.3.1命令行模式下的退出 在命令行模式下,常用输入wq回车,保存并退出编辑,下表为具体的退出方式:
命令 | 说明 |
---|---|
:q | 退出 |
:wq | 保存并退出 |
:q! | 强制退出 |
:wq! | 强制保存并退出 |
:x | 保存并退出 |
:w<文件路径> | 另存为 |
:saves 文件路径 | 另存为 |
2.3.3普通模式下的退出 普通模式下用户可以使用Shift zz进行保存并退出操作!
3、Vim的增删改查、复制粘贴撤销与快速缩进
不知道为什么,一提到增删改查我就很激动。
3.1、增删改查
3.1.1、增加(插入)操作 Vim很直接的拥有一个插入模式进行插入操作,下表为在普通模式下进入插入模式的具体方式(不包括通过替换方式进入插入模式的方法):
按键 | 说明 |
---|---|
i | 在当前光标处进行编辑 |
I | 在行首插入 |
a | 在光标后插入编辑 |
A | 在行末插入 |
o | 在当前行后插入一个新行 |
O | 在当前行前插入一个新行 |
3.1.2、删除操作 进入普通模式,使用下列命令可以进行文本快速删除:
命令 | 说明 |
---|---|
x | 删除游标所在的字符 |
X | 删除游标所在前一个字符 |
Delete | 删除游标所在的字符(同x) |
dd | 删除整行 |
dw | 删除一个单词(不适用中文) |
d$或D | 删除至行尾 |
d^ | 删除至行首 |
dG | 删除到文档结尾处 |
d1G | 删至文档首部 |
3.1.3、修改(替换)操作 替换是针对普通模式下的操作,具体操作间下表:
命令 | 说明 |
---|---|
r <待替换字母> | 将游标所在字母替换为指定字母 |
R | 连续替换,直到按下Esc |
cc | 替换整行,即删除游标所在行(将进入插入模式) |
cw | 替换一个单词,即删除一个单词(将进入插入模式) |
C | 替换游标以后至行末 |
~ | 反转游标所在字母大小写 |
3.1.4、查找操作 普通模式下输入 / 然后键入需要查找的字符串 按回车后就会进行查找。 ? 与/ 功能相同,只不过 ? 是向上而 / 是向下查找。 进入查找之后,输入n 和 N 可以继续查找。 n是查找下一个内容,N查找上一个内容。 此外,普通模式下可以使用*(或g*)和#(或#)来向下和向上寻找游标所在处的单词。
3.2、复制、粘贴、撤销与快速缩进
3.2.1、复制粘贴与剪切粘贴 普通模式中使用y复制:
命令 | 说明 |
---|---|
yy | 复制游标所在的整行(5yy表示复制5行) |
y^ | 复制至行首,或y0。不含光标所在处字符 |
y$ | 复制至行尾。含光标所在处字符 |
yw | 复制一个单词 |
y2w | 复制两个单词 |
yG | 复制至文本末 |
y1G | 复制至文本开头 |
普通模式下的使用p进行粘贴:
- p(小写)代表粘贴至光标后(下)
- P(大写)代表粘贴至光标前(上)
此外上文提到的dd删除操作也是剪切,删除后可以使用p进行粘贴的。
3.2.2、撤销(Undo)操作
- Vim使用u或者u{n}进行撤销一次或者n次的操作;
- 使用U(大写) 撤销当前行的所有修改;
- 此外,Vim使用Ctrl r进行Redo(复原)操作,进行对undo操作的插销。
3.3.3、快速缩进与文本调整 以下是常用的缩进和文本调整方式:
命令 | 说明 |
---|---|
<< | 整行向左回退 |
>> | 整行将向右缩进(非常好用) |
:set shiftwidth? | 命令行模式下,获取缩进设定值 |
:set shiftwidth?=n | 命令行模式下,设定缩进值为n |
:ce(center) | 使本行内容居中 |
:ri(right) | 使本行文本靠右 |
:le(left) | 使本行内容靠左 |
4、Vim的高级功能
高级功能剩下的内容有时间再更新吧。。。
5、总结
VIM 如果不是经常使用,很容易忘记它的使用技巧,需要经常复盘,久而久之也就养成了手指记忆。
为了更好的解决这个问题,让各大开发者可以快速掌握 Vim 的常用快捷键,一位开发者做了一款游戏:Vim Adventures。在这个游戏中,你需要配合各种常用的 Vim 快捷键,来移动光标,与 NPC 进行对话,寻找线索,获取钥匙,打开宝箱。当你一次次通关后,便会慢慢发现自己已成功掌握大量 Vim 使用技巧。 PS:这个游戏只有前三关是免费的!!!
如果文章有表述不当的地方可以留言指正,互相学习 。