Juliacon 2024

Jurassic REPL: vi Finds a Way
07-11, 11:10–11:20 (Europe/Amsterdam), For Loop (3.2)

VimBindings.jl is a Julia package which brings vim emulation to the Julia REPL, but covers only a fraction of the large feature-set of vim. Neovim, a vim fork, offers a robust API that can be used to add vim-like functionality to other software, an approach employed by the likes of the VSCode Neovim plugin. This talk demonstrates the progress made in adopting a similar neovim-based solution in VimBindings.jl.


vi is a text editor from 1976. Today, in 2024, users of vi and its descendants can be found furiously editing text in almost every computing environment imaginable. Unfortunately, a vi user may occasionally find themselves in the difficult situation of using a program that isn’t vi, one that isn’t even a vi descendant. Julia is one such example: a powerful, dynamic programming language used in many scientific and numerical applications.

VimBindings.jl is a Julia package which brings a subset of vim features to the Julia REPL, alleviating some of these difficulties; still, its features emulate just a fraction of vim’s feature set, and it falls short of being truly called a full vi or vim implementation.

Now, VimBindings.jl is on the path bringing the full power of vim to the REPL by integrating with neovim, a recent fork of vim, under the hood. This talk presents the technical progress made in the VimBindings.jl package in integrating with neovim. It will also discuss design challenges that emerge at the intersection of paradigms, and the opinionated design decisions made to resolve them.

Soon, us vim users will be able to answer “yes” to the question of whether we can transform Julia into vim; whether we should will be left as an exercise for the viewer.

See also:

Caleb Allen is a software engineer with experience developing applications and tools, primarily in startups. He especially enjoys building tools and infrastructure that make software development more enjoyable and productive.

This speaker also appears in: