位置:编程技术网 > 数据库 > 正文 >

用聪明的方式学习Vim,不再死记硬背,复杂命令一学就会

2020年08月31日 14:52来源:未知手机版

你是我最深最深的爱,广西医科大学图书馆,伍美珍的书

金磊 发自 凹非寺
量子位 报道 | 公众号 QbitAI

金磊 发自 凹非寺

量子位 报道 | 公众号 QbitAI

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「交流」的聪明方式。

本文地址:http://www.reviewcode.cn/shujuku/169713.html 转载请注明出处!

今日热点资讯