Re: [dev] [RFC] Design of a vim like text editor

From: FRIGN <>
Date: Sat, 13 Sep 2014 16:58:35 +0200

On Sat, 13 Sep 2014 16:01:15 +0200
Marc André Tanner <> wrote:

Hey Marc,

> TLDR: I'm writing an experimental but (hopefully) highly efficient vim
> like text editor based on a piece chain data structure. You will find
> an url to a git repository at the end of this rather long mail.

your mail made my day! I've read your concept and am delighted by how well
thought-out it is. The piece table is a good approach, which has also been
verified by Charles Crowley in "Data Structures for Text Sequences".

> This should be accomplished by a reasonable amount of clean (your mileage
> may vary), modern and legacy free C code. Certainly not an old, 500'000
> lines[1] long, #ifdef cluttered mess which tries to run on all broken
> systems ever envisioned by mankind.

I know _exactly_ what you mean and you are perfectly right. I couldn't wait
for an alternative to vim to show up and intentionally didn't "study" vim
too thoroughly.

I have got one question though: When you are talking about Unicode-awareness,
are you talking about UTF-8 or more complex sets?

> It is possible to open multiple windows via the :split/:vsplit/:open
> commands or by passing multiple files on the command line.
> In principle it would be nice to follow a similar client/server approach
> as sam/samterm i.e. having the main editor as a server and each window
> as a separate client process with communication over a unix domain socket.
> That way window management would be taken care of by dwm or dvtm and the
> different client processes would still share common cut/paste registers
> etc.
> However at the moment I don't want to open that can of worms and instead
> settled for a single process architecture.

Going with named pipes or sockets would be the better approach.

> Stuff which vim does which I don't use and have no plans to add:
> - GUIs (neither x11, motif, gtk, win32 ...)
> - text folding
> - visual block mode
> - plugins (certainly not vimscript, if anything it should be lua based)
> - runtime key bindings
> - right-to-left text
> - tabs (as in multiple workspaces)
> - ex mode
> - macro recording

I agree with all of them. Many "features" in vim evolved simply from the fact
that programming languages like C++ and Java require whole IDE's to be
written (especially the class-like-structure is a curse).
For the other stuff, there should be ways to do it outside the editor.

> At this point it might be best to fetch the code, edit some scratch file,
> notice an odd behavior or missing functionality, write and submit a patch
> for it, then iterate.

Playing around with it I noticed that "dd" doesn't work in the last line
and sometimes mixes up things.
Write a document with "ee"'s in each line. Then do a dd. The last line
won't get deleted and sometimes, a line is removed, but leaves a single "e"
as a trace.
I may send you a patch in the next few days using the great arg.h by
Christoph whenever possible. I also noticed some smaller warnings while
compiling, which should be trivial to fix.

All in all, great work on this piece of software! I see you spent a lot
of time designing and writing the well-commented code.



Received on Sat Sep 13 2014 - 16:58:35 CEST

This archive was generated by hypermail 2.3.0 : Sat Sep 13 2014 - 17:00:08 CEST