没想到还能用这种方式学 Vim!

共 6444字,需浏览 13分钟

 ·

2020-09-04 21:09



点击上方“杰哥的IT之旅”,选择“星标”公众号



重磅干货,第一时间送达











来自量子位


Vim 难学难用?但事实是,它依旧受许多程序员的欢迎。


或许,只是你的「打开方式」不对。


最近,在 GitHub 上便出现了一个叫做用聪明的方式学习 Vim 的项目,上线短短几天时间,便已经斩获 2200 星。





那么,如此学习Vim的方式,到底有多「聪明」?

用聪明的方式与Vim「交流」



很多人可能会被 Vim 命令的复杂性吓到。


因此,作者将 Vim 命令的一般结构,分解成了一个简单语法规则。


这也是本教程中最为重要的一个章节——一旦了解了 Vim 命令类似语法的结构,就能跟它「畅谈无阻」。





按照作者的说法,「只需要知道一个语法规则」,就可以说Vim的语言了:



verb + noun



如果拿英文短句做类比,就例如:



Eat (verb) a donut (noun)


Kick (verb) a ball (noun)



现在,只需要使用基本的 Vim 动词和名词来增加词汇量。

Vim 的名词和动词



这里说到的Nouns,就是 Vim 中的一些动作,例如:



h:左
j:下
k:上
l:右
w:移动到下个词的开头
}:跳到下一个段
$:移动到本行末尾




而 Vim 中的 Verbs,就相当于操作符。


以 h 操作符为例,Vim 中有16种,但只需要知道其中3种,便可以满足80%的需求。



y:复制
d:删除文本,保存到register
c:删除文本,保存到register,并开始「插入」模式




OK,了解了「名词」和「动词」,现在便可以应用到「语法规则」中了:



y$:把当前所有的东西,从当前位置拖拽至行末
dw:从当前位置删除到下一个单词的开头
c}:将当前位置更改为此段末尾




当然,类似这样的组合,也接受数字作为其中的参数,例如:



y2h:向左拉2个字符
d2w:删除接下来的2个单词
c2j:改变接下来的2行内容




除此之外,行式操作(linewise operations)是文本编辑中的常见操作,因此,Vim 也允许你通过连续键入2次操作符来完成类似这样的操作。


比如,键入「dd」,删除整行内容;键入「cc」,更改整行内容。

可组合性和语法



在讨论 Vim 语法之后,便是 Vim 的可组合性(Composability)。


可组合性意味着拥有一组通用命令,可以组合起来执行更复杂的命令。当与外部程序集成时,Vim 的可组合性的真正威力就显现出来了。


举个例子,现在有一段「乱七八糟」的文字,如下所示:



Id|Name|Cuteness
01|Puppy|Very
02|Kitten|Ok
03|Bunny|Ok




现在需要将这些文字转换成为表格形式,若是用 Vim 命令来实现这点可能会有一些困难,但是可以使用 column terminal 命令快速完成。


将鼠标指向「ID」,然后运行 !}column -t -s “|” ,就可以得到漂亮的表格了:



Id   Name    Cuteness
01  Puppy    Very
02  Kitten    Ok
03  Bunny   Ok




回过头来看下刚才的命令。


「!」是过滤操作符,「}」是名词,过滤操作符接收了另一个参数,也就是一个终端命令,「column -t -s “|” 」。


简而言之,经过这样的一番操作后,便完成了文字表格化的任务。


再例如,除了表格化之外,再筛选带有「OK」的行,可以这样做:



!}column -t -s “|” | awk ‘NR > 1 && /Ok/ {print $0}’



得到的结果便是:



02  Kitten  Ok
03  Bunny  Ok




这就是一种与 Vim「交流」的聪明方式。


但作者也同时指出,刚开始学习、适应这种「Vim 语法」是需要一定时间,但只要熟练起来后,便可轻松驾驭。

基于Vim语法的更多操作



在介绍完 Vim 的语法规则后,便可以基于此来完成更多操作和任务。


例如在本教程中的第五章,便介绍了「如何在文件中移动」。


刚开始用键盘来完成这项任务,肯定是比较慢的,但作者认为:



只要你把这个方法熟悉起来,要比用鼠标还要快。



最基本的操作便是向左、向右、向上和向下移动一个字符:



h   Left
j    Down
k   Up
l    Right




在字符之后,便是以文字为单元的移动。



W:移动到下一个单词的开头处
E:移动到下一个单词的结尾处
B:移动到前一个单词的开头处
gE:移动到前一个单词的结尾处




接下来是以「行」为单位的移动:



0:移动到当前行的第一个字符处
^:移动到当前行第一个非空字符处
g_:移动到当前行最后一个非空字符处
$:移动到当前行最后一个字符处
n|:移动到当前行的第n列




当然,用类似的Vim方式,还可以完成「段」级别、搜索、滚动、标记等一系列移动操作。





此外,教程中还提供了许多其他操作的教程,例如「Insert Mode」、「Undo」等等。


目前教程还在更新中,有兴趣的读者可以持续关注这份「聪明的Vim教程」。


传送门:


https://github.com/iggredible/Learn-Vim


回复下方 「关键词」,获取优质资源


回复关键词 「CDN」,即可获取 89 页 CDN 排坑指南手册
回复关键词 「ECS」,即可获取 96 页 ECS 运维 Linux 系统诊断手册
回复关键词 「linux」,即可获取 185 页 Linux 工具快速教程手册
回复关键词 「Python进阶」,即可获取 106 页 Python 进阶文档 PDF
回复关键词 「Python自动化」,即可获取 97 页自动化文档 PDF
回复关键词 「Excel数据透视表」,即可获取 136 页 Excel数据透视表 PDF
回复关键词 「Python最强基础学习文档」,即可获取 68 页 Python 最强基础学习文档 PDF
回复关键词 「wx」,即可加入杰哥的IT之旅读者交流群






- End -








本公众号全部博文已整理成一个目录,请在公众号后台回复「m」获取!









推荐阅读:









































1、9 种方法有效帮你提高国内访问 GitHub 的速度!

2、这些 Nginx 常见异常,帮你快速定位故障!

3、Chrome 现在也能编辑 pdf 文件了!64 位安卓版上线,网页加载快 10%,还有良心标签管理功能

4、这 22 款命令行神器必须安排上!

5、中国程序员最容易发音错误的单词

6、史上最全的数据库面试题,不看绝对后悔!





























点分享








点点赞







点在看



























浏览 70
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报