Vim 是从 vi 发展出来的一个文本编辑器。它类似于vi但又存在区别,因为它功能强大且高度可配置,在vi的基础上进行了很多的改进。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用,还可以创建和更改任何类型的文本,效率非常高。

而从 vi 发展出来的 Vim 具有很多模式,这种独特的设计容易使初学者产生混淆。

Vim 具有6中基本模式和5中派生模式

基本模式

普通模式

在普通模式中,用的编辑器命令,比如移动光标,删除文本等等。这也是Vim 启动后的默认模式。Vim 强大的编辑能力来自于其普通模式命令。普通模式命令往往需要一个操作符结尾。例如普通模式命令"dd"删除当前行,但是第一个"d"的后面可以跟另外的移动命令来代替第二个"d",比如用移动到下一行的"j"键就可以删除当前行和下一行。另外还可以指定命令重复次数,"2dd"(重复"dd"两次),和"dj"的效果是一样的。在普通模式中,有很多方法可以进入插入模式。比较普通的方式是按"a"(append/追加)键或者"i"(insert/插入)键。

插入模式

在这个模式中,大多数按键都会向文本缓冲区中插入文本。大多数新用户希望文本编辑器编辑过程中一直保持这个模式。在插入模式中,可以按ESC 键回到普通模式。

可视模式

这个模式与普通模式比较相似。但是移动命令会扩大高亮的文本区域。高亮区域可以是字符、行或者是一块文本。当执行一个非移动命令时,命令会被执行到这块高亮的区域上。Vim 的"文本对象"也能和移动命令一样用在这个模式中。

选择模式

这个模式和无模式编辑器的行为比较相似。这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim 会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

命令行模式

在命令行模式中可以输入会被解释成并执行的文本。例如执行命令(":"键),搜索("/"和"?"键)或者过滤命令("!"键)。在命令执行之后,Vim 返回到命令行模式之前的模式,通常是普通模式。

Ex模式

这和命令行模式比较相似,在使用":visual"命令离开 Ex 模式前,可以一次执行多条命令。

派生模式

操作符等待模式

这个派生模式指普通模式中,执行一个操作命令后 Vim 等待一个"动作"来完成这个命令。Vim 也支持在操作符等待模式中使用"文本对象"作为动作,包括"aw"一个单词(a word)、"as"一个句子(a sentence)、"ap"一个段落(a paragraph)等等。比如,在普通模式下"d2as"删除当前和下一个句子。在可视模式下"apU"把当前段落所有字母大写。

插入普通模式

这个模式是在插入模式下按下 ctrl+o 键的时候进入。这个时候暂时进入普通模式,执行完一个命令之后,Vim 返回插入模式

插入可视模式

这个模式是在插入模式下按下 ctrl+o 键并且开始一个可视选择的时候开始。在可视区域选择取消的时候,Vim 返回插入模式。

插入选择模式

通常这个模式由插入模式下鼠标拖拽或者 shift 方向键来进入。当选择区域取消的时候,Vim返回插入模式。

替换模式

这是一个特殊的插入模式,在这个模式中可以做和插入模式一样的操作,但是每个输入的字符都会覆盖文本缓冲中已经存在的字符。在普通模式下按"R"键进入。

其他

Evim (Easy Vim)

Evim(Easy Vim)是一个特殊的GUI模式用来尽量的表现的和"无模式"编辑器一样。编辑器自动进入并且停留在插入模式,用户只能通过菜单、鼠标和键盘控制键来对文本进行操作。可以在命令行下输入"evim"或者"vim -y"进入。在 Windows 下,通常也可以点击桌面上 Evim(Easy Vim)的图标。

Vim 的正确学习方式

在正式接触到 Vim 之前,你一定从别人那里听说过 Vim 是多么多么的强无敌,虽然它的命令的确非常方便,但是要正确的入门却不是一件容易的事。一不小心就会弄成《Vim——从入门到放弃》。

 

要学习这个工具,首先得明白以下几点:

1,学习Vim在开始是痛苦的

2,不要希望你3天就能精通,实际上你可能需要2周甚至更久。

3,需要不断的练习。

学习顺序:

1,在 Insert/Normal 模式下编辑文档(五个命令:i,x,:wq,dd,p)

2,学习更多的命令(插入模式,移动光标,拷贝/粘贴,Undo/Redo,打开/保存/退出/改变文件)

3,学习技巧型命令(如何更好,更快,更强)

4,学习超能力(超能力级功能)

Vim的常用命令

Vim中的命令数不胜数,它可以让你只需要看你的键盘就可以完成所有的事情,但是其中并不是所有的命令都那么常用,这里就列举那些最有用的命令。

这些命令也可以分为以下四级

1,在 Insert/Normal 模式下编辑文档(五个命令:i,x,:wq,dd,p)

2,学习更多的命令(插入模式,移动光标,拷贝/粘贴,Undo/Redo,打开/保存/退出/改变文件)

3,学习技巧型命令(如何更好,更快,更强)

4,学习超能力(杀手级功能)

在 Insert/Normal 模式下编辑文档

打开vim之后默认是Normal模式。Normal模式下你可以操作你的光标,接下来是Normal模式中的一些简单命令,在Normal模式下,几乎所有的键都是功能键。

 

i —— 插入模式,这个模式让你你可以像记事本一样的输入文本,如果已经输入完了,按ESC返回Normal模式。

x —— 删除当前光标所在处的字符

:w —— 存盘

:q —— 退出,你可以使用 :wq来同时进行这两个操作

dd —— 剪切当前行

p —— 粘贴

hjkl —— 效果等同于←↓↑→,用于移动光标

:help<command> —— 显示相关命令的帮助

学习更多的命令

除了i之外,还有别的插入模式可以选择

a —— 在光标后插入

o —— 在当前行后插入新行

O —— 在当前行前插入新行

一些快速移动光标的指令

0 —— 数字零,到行头

^ —— 到本行第一个不是空字符的位置

$ —— 到行尾

g_ —— 到行尾最后一个不是空字符的位置

/pa —— 搜索 pa 这个字符串,按n查找下一个

关于文件的指令

:e <path/to/file> —— 打开一个文件

:saveas <path/to/file> —— 另存为

:q! —— 不保存退出 :qa!可以退出所有编辑中的文件

:bn :bp ——当你打开了很多文件,用这个切换到下一个/上一个

其他的指令

u —— 撤销

ctrl+r —— 重做

学习技巧型命令

Vim重复自己的方法

. —— 小数点,重复上次命令

N<command> —— 重复一个命令N次

 

下面是一个特殊的例子

100imeow[ESC] —— 写下100个“meow”

. —— 重复上一个命令 也就是再写100个“meow”

3. —— 重复3次命令 写下3个(而不是300个)“meow”

进阶级移动光标的命令

NG —— 移动到第N行 ,:N也可以

gg —— 到第一行

g —— 到最后一行

w —— 到下一个单词开头

e —— 到下一个单词结尾

% —— 当光标在括号上时,可以移动到与之对应的另一个括号

*和# —— 移动到下一个/上一个光标所在的单词上

 

实际上这些命令都可以组合输入,格式为:<start position><command><end position> 举个简单的例子

0y$ —— 0和 $ 是位置,y是指令,这个指令的意思就是从行头拷贝到本行最后一个字符。

 

除了 y,还有不少命令可以这么做,比如

d  —— 删除

gU/gu —— 变为大写/小写

v ——可视化选择

学习超能力

更高级的移动光标

Fa/fa —— 移动到上一个/下一个a字符,a可以换成其他字符

T,/t, —— 移动到逗号后/前的那一个字符,逗号可以换成其他字符

3fa ——到第三个a字符处

dt” —— 在遇到”前删除所有内容

区域选择

区域选择的命令格式一般为<action>a<object> 和 <action>i<object>

用一个简单的例子来区别a和i

假如说有这样一个字符串——[123((abcd))],你的光标在b上

vi)——会选择abcd

va)——会选择(abcd)

v2i)——会选择(abcd)

v2a)——会选择((abcd))

自动补齐

在 insert 模式下输入一个词的开头,然后按ctrl+p或+n,就可以使用自动补齐了

qa——开始录制宏,并把你的操作记录在a

@a—— replay你在a录制的宏

@@—— replay最新的宏