前言

我接触vim比较晚,第一次遇到是使用git管理项目,远端和本地发生冲突,系统自动转到了vi编辑页面,当时一脸懵逼,连续试了几次 ctrl + c无果之后,只好重启终端。

直到了解到:q!命令,才解决了我git初期的痛苦。就在我疯狂按了几个月:q!, 突然有一天同事和我说,你这样是不对的,你得知道:q!和:wq!的区别,好吧…..,废话不多说了。

什么是 vi/vim

Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999 年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢得了Slashdot Beanie的最佳开放源代码文本编辑器大奖,又将Emacs推至二线, 总的来看, Vim和Emacs在文本编辑方面都是非常优秀的。
vim 的官方网站自己也说 vim 是一个程序开发工具而不是文字处理软件。

vi/vim 的使用

基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。 这三种模式的作用分别是:

命令模式

用户刚刚启动 vi/vim,便进入了命令模式。
此状态下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
以下是常用的几个命令:

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。
命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式

在命令模式下按下i就进入了输入模式。
在输入模式中,可以使用以下按键:
字符按键以及Shift组合,输入字符

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。
底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。
在底线命令模式中,基本的命令有(已经省略了冒号):

简单的说,我们可以将这三个模式想成底下的图标来表示

使用方式

在终端命令行中输入

vim name.txt

如果文件存在,则打开文件编辑页面,如文件不存在,则打开创建文件编辑页面。
一般光标默认在编辑框左上角,文件名在编辑框左下角
打开的编辑页面中,~表示该行没有任何内容。

输入

在一般模式之中,只要按下 i, o, a 等字符就可以进入输入模式了!
在编辑模式当中,你可以发现在左下角状态栏中会出现 –INSERT- 的字样,那就是可以输入任意字符的提示。
这个时候,键盘上除了 Esc 这个按键之外,其他的按键都可以视作为一般的输入按钮了,所以你可以进行任何的编辑

停止编辑

按下 ESC 按钮回到一般模式,马上你就会发现画面左下角的 – INSERT – 不见了!

保存

输入 :wq 即可保存离开!

和我们使用UI页面操作文件的思维有些不同,使用vi命令操作文件,需要如下步骤

  1. 使用 vi 文件名 打开文件,
  2. 按下 i 字符切换到编辑模式。
  3. 按下esc退出编辑模式,此时文件并未保存到硬盘。相当于在编辑器中修改,并未按ctrl + s
  4. 输入:wq保存文件。

按键说明

除了上面简易范例的 i, Esc, :wq 之外,其实 vim 还有非常多的按键可以使用

一般模式

一般模式可用的光标移动、复制粘贴、搜索替换等

如果你将右手放在键盘上的话,你会发现 hjkl 是排列在一起的,因此可以使用这四个按钮来移动光标。 如果想要进行多次移动的话,例如向下移动 30 行,可以使用 "30j" 或 "30↓" 的组合按键, 亦即加上想要进行的次数(数字)后,按下动作即可!

使用 /word 配合 n 及 N 是非常有帮助的!可以让你重复的找到一些你搜寻的关键词!

这个 u 与 [Ctrl]+r 是很常用的指令!一个是复原,另一个则是重做一次~ 利用这两个功能按键,你的编辑,嘿嘿!很快乐的啦!

编辑模式

指令模式

特别注意,在 vi/vim 中,数字是很有意义的!数字通常代表重复做几次的意思! 也有可能是代表去到第几个什么什么的意思。

举例来说,要删除 50 行,则是用 『50dd』 对吧! 数字加在动作之前,如我要向下移动 20 行呢?那就是『20j』或者是『20↓』即可。

来源