这辈子你可能都不用学vim了

简介: 1975的秋天,Unix光环加身的大神Ken Thompson休了一个长假,从贝尔验室回到了自己的母校:加州大学伯克利分校,他将在这里以访问学者的身份待一学年。

1975的秋天,Unix光环加身的大神Ken Thompson休了一个长假,从贝尔验室回到了自己的母校:加州大学伯克利分校,他将在这里以访问学者的身份待一学年。

网络异常,图片无法展示
|

在伯克利分校,Ken Thompson把Unix 安装到了最新的机器PDP 11/70上面,并且开设了一门Unix的课程。

网络异常,图片无法展示
|

(PDP-11/70)

他不仅讲解理论,还在晚上带着大家阅读一行行的Unix内核代码,向大家解释为什么这么做。

每个晚上,学生们都围绕在Ken Thomphson周围,瞪着一双双求知的大眼睛,聆听Unix作者的教诲,实在是太幸福了!

这些学生当中有一个叫做Bill Joy的研究生,把Unix玩得最溜,他修改了Unix,添加了自己的程序,后来又为Unix设计了至今仍然在使用的TCP/IP网络接口,形成了著名的BSD发行版。

网络异常,图片无法展示
|

后来Bill Joy时不时地到贝尔实验室“朝圣”,有一天晚上,他向 《C编程语言》的作者Brian Kernighan展示一个他正在研发的文本编辑器。

网络异常,图片无法展示
|

Bill :Brian ,你看看我新开发的文本编辑器,它比现在最流行的ed好多了。

Brian:哦?是吗?

Bill Joy :ed是以行为单位进行编辑,对新手来说非常不直观,我的编辑器使用光标来定位、编辑,这是对ed的重大变革。

Brian :小伙子,我建议你应该停止折腾编辑器,专心完成你的博士学位。

很明显Bill并没有理会这个建议(幸亏他没有理会),因为这个编辑器就是大名鼎鼎的vi

网络异常,图片无法展示
|

Bill后来干脆从研究生院退学,和人一起创办了Sun公司,开创了属于自己的传奇。

故事讲完了,接下来说说vi (以及它的后代vim)为什么这么牛。

在刚入门vim的同学看来,这个工具极其简陋,需要记忆各种各样的命令,还得在各种模式之间切换。

新手进入vi以后经常让人手足无措,头晕眼花,连退出都没法退出,最后扔下一句:什么破玩意儿!以后再也不碰它了

网络异常,图片无法展示
|

和其他编辑器相比,vi的学习曲线非常搞笑,刚开始时直线上升,然后就平稳了,这是为什么呢?

原因有两点:

1. 用熟练了(废话!)

2. 掌握了vi设计的底层逻辑

这个底层逻辑是什么呢?在《vim实用技巧》以及vim的Help中总结成:

操作符(operator) + 动作命令(motion) = 操作

这个总结还不容易理解,有个国外网友Yan Pritzker在《Learn to speak

vim — verbs, nouns, and modifiers!》中总结得更加直观,更加漂亮。

动词

动词表示对文本的操作,例如

d delete 删除

r replace 替换

y yank 复制

v visual 选择

名词

表示待编辑的文本对象

w word 一个单词

s sentence 一个句子

p paragraph 一个段落

修饰符(有人称为介词)

表示待编辑文本的范围或者位置

i inside 表示在...之内

a around 表示环绕

t till 直到某个字符(不包括该字符)

f find 直到某个字符(包括该字符)

然后就可以组词成句了:动词 + 介词 + 名词 ,例如:

删除当前的单词 : diw (delete inside word)

改变当前的句子:cis(change inside sentence)

删除文本直到字符e : dte (delete till 'e')

选择一个句子:vis (visual inside sentence)

你现在已经知道了如何删除一个单词,如何删除一个句子?

没错,就是 dis(delete inside sentence)

现在我告诉你一个新的动词 gU ,可以把一个单词转化成大写形式,那如何把一个句子都变成大写呢?

对,就是 gUis(gU+i+s)

如果把一个段落变成大写?gUip(gU+i+p)

再进一步,现在我告诉你一个新的介词:t 用来表示html/xml的tag。

那如何删除<h1>hello world<h1>这一行的hello world而保留tag呢?

按照上面的规则,你马上就能想到:dit (delete in tag)

是不是非常自然和简单?vi这个让人生畏的软件是不是立刻变得亲切起来?

如果vim 内置的动词、名词,介词不符合你的要求怎么办?

可以用插件,例如vim-textobj-rubyblock增加了一个名词 ruby block(r)

你可以直接用命令var(visual around ruby block)去选择一个ruby 代码块。

网络异常,图片无法展示
|

正是有各种各样内置的、定制的命令,我们可以看到那些vim大神们双手在键盘中上下翻飞,屏幕上的代码如同魔术一般变换,让人叹为观止

如果我们深入地想一下,vi背后蕴含了一个伟大的思想:正交。

动词、名词、介词之间是正交的,它们不但可以独立变化,而且可以任意组合:

网络异常,图片无法展示
|

不过,虽然思想简单,但是想要成为vim大神,道路依然很长,非得下功夫练习不可。

如果这篇文章能激发一点儿你的好奇心,把vim从角落处拉出来,再把玩一番,感受一下,那我的目的也就达到了。

相关文章
|
人工智能 缓存 Ubuntu
vim的使用
vim的使用
129 0
|
数据可视化 IDE Java
人人都会Vim
Vim 通常是在服务器上操作/修改配置文件的时候使用。类似的编辑器当然还有 vi, emacs。同样作为编辑器与IDE最大的区别是不使用鼠标进行操作,完全使用键盘,具有系统资源占用小,打开较大文件速度快的特点。相对应的进行操作都是通过键盘敲命令操作,所以要记住比较多的命令,学习起来还是比较枯燥的,这里整理了一些常用的命令,以备大家在用的时候作为一个参考。
|
开发工具
|
开发工具 git Windows
vim
install VIM VIM官网下载安装包 我是安装再D盘 vimPath 基础配置 vim所有配置都在_vimrc里配置。例默认的配置颜色字体主题不是很好看,可以在里面加 set background=dark colorsc...
1083 0
|
开发工具
|
开发工具 虚拟化 Shell
|
Linux 开发工具 Windows