五嘎子 1 个月前发布 | 2K 次阅读 VIM
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 的可组合性的真正威力就显现出来了.
举个例子, 现在有一段「乱七八糟」的文字, 如下所示:
- IdNameCuteness
- 01PuppyVery
- 02KittenOk
- 03BunnyOk
现在需要将这些文字转换成为表格形式, 若是用 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
本文由用户 五嘎子 自行上传分享, 仅供网友学习交流. 所有权归原作者, 若您的权利被侵害, 请联系管理员.
来源: http://www.open-open.com/news/view/5472654809855886329