逛 GitHub 的时候发现了一个大概几百行 C 代码实现的命令行编辑器,但是看了一些代码,感觉好垃圾。于是 Google 一下,发现一个Build Your Own Text Editor的教程。直觉告诉我,一般这种英文的 booklet 都是小而精的,果然这次也没有让我失望。看它的简介:

The text editor is antirez’s kilo, with some changes. It’s about 1000 lines of C in a single file with no dependencies, and it implements all the basic features you expect in a minimal editor, as well as syntax highlighting and a search feature.

This booklet walks you through building the editor in 184 steps. Each step, you’ll add, change, or remove a few lines of code.

正是我想要的!

我差不多是跟着这个教程一步步的写下来的。教程很好,代码是用diff来显示的,一步步做下来肯定没问题,一些基础的C知识也有解释(虽然我都跳过了)。既然有了这么好的教程我为什么还要再写呢?

一个原因是我的代码和教程已经有很大的不同。其实我在跟着教程做的过程中,没有完全的 copy 他的代码,而是看下这一小节要完成的功能,先自己去实现,最后和他的实现对比,再进行修改。这样一来,我的代码就有一些和教程不同了。再加上,有时我想到一个功能是教程里没提到的,停下来去实现好了,再接着看教程的下一步。从而代码又加入很多新的东西。最后,还有一点,我的代码格式,命名规则也和教程的不一样,他的命名规则(驼峰式)我不喜欢啊。

另一个原因嘛,就是为了记录一下自己编码的过程。

也是在编码的过程中,可能是因为某种情怀,使得我的加入的功能是和 Vi 中的功能对应的,比如,编辑器有两种模式:NORMAL 和 INSERT,也是模仿的 Vi。所以我干脆把项目重命名为VIP(Vi Poor),就是乞丐版的 Vi 了。顺便一提,VIM 的全称的 Vi Improved。VIP 实现的功能只是 Vi 功能的冰山一角,我甚至觉得蹭上 Vi 这个名字都是侮辱了 Vi(

以上,就是一些杂乱的想法,写 VIP 也有一星期了啊。主要分了下面这几步,有一些步骤和Build Your Own Text Editor的教程很像了,可以当做是翻译?不过一些基础的C知识我是不会在这里写的(。每个步骤,在 GitHub 上都是一个独立的 branch,我第一次发现 branch 还可以这样用,是在学 Android 的时候。

TOC

  • Raw input and output
  • A text viewer
  • A text editor
  • Vi operations
  • Search
  • Syntax highlighting