Vi + Acme = ☺

Disclaimer: This software is not ready. I am using it and it is stable but I still have to make it feel great, if you have suggestions I would be glad to take them. I wrote a list of work that I will attempt in the future.

I like Acme a lot, but without vi keybindings, I cannot edit text. So I tried to mix the two together. I first implemented vi's command language as described by POSIX. Then I tried to mix some Acme features by allowing the editor to start external processes and asynchronously get their output into an edit buffer. The file system stuff that is very specific to Acme is not implemented, mainly because it is a pain on a Unix like OS.

Quick Start

When started, use the regular vi keybindings to edit the text in the main window, you can load one file by passing it as argument. To save the opened file, use ^W.

To open another file without quitting, open the tag window using ^T. The focus is now on the tag window, you can edit it just like the main window using vi keybindings. Some text is already present in the tag, go to the line starting with "Get" and append the name of the file you want to open. Once done, exit insertion mode and press Tab on the line. The file should now be loaded in the main window.

Similarly to look for a certain string, use the "Look" command in the tag window. To find the subsequent matches, use the regular "n" command of vi.

If you press tab on a line that does not start by a builtin command it is executed in a shell. The syntax for commands follows Acme's conventions, i.e. it understands the sigils |<>. To select some text, use the "y" vi command, or the left button on the mouse.

You can close the tag window anytime using ^T again. To quit, use ^Q. For more details on the possible commands and keybindings, read the files vicmd.w and exec.c.

Differences with Vi


Clone the repository git://c9x.me/ed.git for the latest changes. You can also browse the repository.

Compile with GNU make, you will also need cweb (as provided by most LaTeX distributions) because one file is written in literate programming. A minimal package is available on Knuth's webpage, note that it is a tarbomb!

For ease of reading of the command definition code, run

cweave vicmd; tex vicmd
xdvi vicmd.dvi

The patches listed below are contributed by users, they can be applied with the git apply command. I will do my best to make sure they always fit the current version.


The following video shows some features of the current version. To execute commands, I move the cursor on the command line and hit Tab. If you checkout the latest version, the look of the editor is slightly nicer and there is support for multiple windows (commands New and Del).