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 返回到命令行模式之前的模式,通常是普通模式。
这和命令行模式比较相似,在使用”: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)是一个特殊的GUI模式用来尽量的表现的和”无模式”编辑器一样。编辑器自动进入并且停留在插入模式,用户只能通过菜单、鼠标和键盘控制键来对文本进行操作。可以在命令行下输入”evim”或者”vim -y”进入。在 Windows 下,通常也可以点击桌面上 Evim(Easy Vim)的图标。
在正式接触到 Vim 之前,你一定从别人那里听说过 Vim 是多么多么的强无敌,虽然它的命令的确非常方便,但是要正确的入门却不是一件容易的事。一不小心就会弄成《Vim——从入门到放弃》。
要学习这个工具,首先得明白以下几点:
1,学习Vim在开始是痛苦的
2,不要希望你3天就能精通,实际上你可能需要2周甚至更久。
3,需要不断的练习。
1,在 Insert/Normal 模式下编辑文档(五个命令:i,x,:wq,dd,p)
2,学习更多的命令(插入模式,移动光标,拷贝/粘贴,Undo/Redo,打开/保存/退出/改变文件)
3,学习技巧型命令(如何更好,更快,更强)
4,学习超能力(超能力级功能)
Vim中的命令数不胜数,它可以让你只需要看你的键盘就可以完成所有的事情,但是其中并不是所有的命令都那么常用,这里就列举那些最有用的命令。
这些命令也可以分为以下四级
1,在 Insert/Normal 模式下编辑文档(五个命令:i,x,:wq,dd,p)
2,学习更多的命令(插入模式,移动光标,拷贝/粘贴,Undo/Redo,打开/保存/退出/改变文件)
3,学习技巧型命令(如何更好,更快,更强)
4,学习超能力(杀手级功能)
打开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最新的宏
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/118001.html