Skip to content

About

TurboVI is a vi clone for the terminal, in about 4,800 lines of Python. It is built on turbodesk and is the one application on that library that draws its own buffer, with no editor() widget under the text.

It was split out of turbodesk on 2026-08-26, where it had lived as examples/vi/ under the name termovi. The showcase half (modal editing over one buffer, no widgets) stayed behind as an example. Everything else moved here and grew the parts an example does not need: several files, split windows, crash recovery, .editorconfig, find-in-project.

What is here

Modes, counts, and the ["x] [count] operator [count] motion grammar. Operators d c y > < with doubling and text objects. Registers, marks, macros, . repeat, undo and redo. Search with / ? n N, substitution with :s and its ranges and flags. Several buffers, split windows in a grid, a fuzzy file picker, find-in-project with a quickfix list and :cdo. Syntax colouring over Pygments. Encodings and line endings preserved byte for byte. Crash recovery. A config file that is a list of ex commands, and .editorconfig.

What is not here

  • No visual block mode. v and V only.
  • No :g. The global command is missing.
  • No '<,'> range on the command line from a visual selection.
  • No completion, of any kind.
  • No folds, no tag stack, no jump list beyond `.
  • Marks do not move with the text. Insert lines above mark a and it still points at the same line number.
  • Windows are a grid, not a tree. :sp adds a row across the full width; :vsp adds a window to the row it is in. Nobody splitting one way at a time can tell, and if you can, session.py is where the tree would go.
  • No :cfdo, :colder or :cnewer. There is one quickfix list, with no history behind it.
  • charset in .editorconfig is ignored on purpose. See settings.

Requirements

Python 3.12 or newer, and a terminal. Pygments comes in with the syntax extra, which is a hard dependency here because :set syntax is not optional in an editor.

The system clipboard needs pbcopy/pbpaste on macOS, or wl-copy/wl-paste or xclip on Linux. Without one of them, "+y says so.

Licence

Apache-2.0.

turbodesk. The library underneath: terminal UIs as pure functions from state to an immutable view tree.

Turbo Python. The other application built on it: an IDE in the shape of Turbo Pascal 7.0, with a desktop of overlapping windows, a debugger and a language-server client. Where TurboVI proves the core carries an app on its own, that one exercises every widget there is.