提起文本编辑器,你一定会想到编辑器之神 Vim。作为一个快 30 岁的老牌编辑器,直到现在还很受欢迎。
但你知道VI吗?
VI是一个命令行界面下的文本编辑工具,最早在1976年由Bill Joy开发,当时名字叫做ex。VI支持绝大多数操作系统(最早在BSD上发布),并且功能已经十分强大。
1991年Bram Moolenaar基于VI进行改进,发布了Vim,加入了对GUI的支持。
随着Vim更新发展,Vim已经不是普通意义上的文本编辑器,而是被广泛的作为在文本编辑、文本处理、代码开发等用途。
Vim 编辑文件非常高效,可支持多个操作系统,如 Unix/Linux、Windows、macOS,甚至 iOS 和 Android 上都能找到 Vim 的移植版本。
Vim编辑器键盘
Vim强大的编辑能力中很大部分是来自于其普通模式命令。Vim的设计理念是命令的组合。
“5dd”5表示总共5行,删除光标所在后的5行,包含光标行; “d$” $"代表行尾,删除到行尾的内容,包含光标; “2yy”表示复制光标及后2行,包括光标行; “%d” %代表全部或者全局,%d表示删除文本所有的内容,也即是清空文档所有的内容。
Vim是一个主流开源的编辑器,其默认执行vim命令,会显示帮助乌干达贫困的孩子,如图4-4为vim与键盘键位功能对应关系:
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml15496/wps1.jpg
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml15496/wps2.jpg
Vim编辑器三种模式
Vim编辑器模式常用有三种,分别是:
命令行模式; 文本输入模式; 末行模式。
在Linux Shell终端下默认执行vim命令,按Enter键后: 默认进入命令行模式; 在命令行模式按i进入文本输入模式; 按ESC进入命令行模式; 按:进入末行模式。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml15496/wps3.jpg
Vim命令行模式实战
Vim虽然非常强大,但是需要记住很多操作命令。如果没有有效的学习方法,操作起来很不方便,只有做到非常熟练才能感受到它带来的快捷。
下图就为Vim编辑器最常用的语法及规则:
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml15496/wps4.jpg
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml15496/wps5.jpg
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml15496/wps6.jpg file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml15496/wps7.jpg
Vim 语法
如果你一旦理解了 Vim 命令的语法结构,就可以与 Vim 进行对话了,就如想要学习一门语言,语法规则是绕不开的一步。
而这个语法,就是动词 + 名词。现在使用基本的 Vim 动词和名词来建立词汇表。
01 Vim 名词与动词
Vim 中的名词(移动):移动是在 Vim 中进行上下左右等操作。 Vim 中的一些动作如下所示:
h:左 j:下 k:上 l:右 w:移动到下个单词的开头 }:跳到下一段 $:移动到本行末尾
Vim 中的动词(操作符):以 h 操作符为例,Vim 中有 16 种。但只需掌握其中的 3 种,就能满足 80% 的编辑要求。
y 复制文本 d 删除文本,并保存到寄存器 c 删除文本,保存到寄存器,并开启「插入」模式
现在了解了 Vim 中基本的名词和动词,就可以根据语法规则组合上述名词和动词:
y$:把当前所有的内容,从当前位置拖至行尾;
dw:从当前位置删除到下一个单词的开头;
c}:从当前位置到当前段落末尾进行更改。
当然移动也接受数字作为参数,如果你想上移 3 行,不需要键入 k 三次,直接使用 3k 就行了:
y2h:向左移动 2 个字符;
d2w:删除后面的 2 个单词;
c2j:更改接下来 2 行。
除此以外,Vim 还允许通过键入操作符命令两次来执行行操作。例如:键入「dd」,删除整行;键入「cc」,更改整行内容。
02 Vim 可组合性和语法
在学习了 Vim 语法之后,下面介绍一下 Vim 中的可组合性。可组合性意味着拥有一组可以组合且执行更复杂命令的通用命令。
在 Vim 中可以组合较简单的命令执行复杂的命令。当 Vim 与外部程序集成时,可组合性的真正威力就显露出来了。
假如你有一个非常混乱的文本,如下所示,你想把它变成列表形式:
Id|Name|Cuteness01|Puppy|Very02|Kitten|Ok03|Bunny|Ok
用 Vim 命令不容易做到,但是你可以用 column 终端命令快速完成。将光标放在「Id」上,运行「!}column -t -s "|"」。就可以得到如下表格数据:
Id Name Cuteness01 Puppy Very02 Kitten Ok03 Bunny Ok
上述的操作过程可分解成这样:动词为「!」(过滤操作符),名词为「}」(转到下一段)。过滤器操作符「!」接受另一个参数,一个终端命令「column -t -s "|"」。
假设你不仅希望将文本列表化,还想筛选出带有「Ok」的行。awk 可以轻松地完成这项任务。可以执行如下操作:
!}column -t -s "|" | awk 'NR > 1 && /Ok/ {print $0}'
得到的结果:
02 Kitten Ok03 Bunny Ok
对操作符、动作和终端命令了解得越多,编写复杂动作的能力就会成倍增加。
文章来源:内容综合自网络,因觉优质,特此分享,侵删。
每天通过一位IE,每两位IE,一位在思博
群里有一群一起备考的战友哦 进入全国网络工程师交流群 ,请扫描下方二维码↓↓↓
群里有行业大咖、实战分享、技术交流、技术咨询、企业内推等机会
若群满,请添加老杨微信(spotoa),邀你进群
|