The brief history of lsp_lines.nvim

2026-08-18 #lsp #neovim

Back in 2022, LSP implementations could find errors and other diagnostics in code and send them into the editor, but editors lacked good interfaces to actually present this. The best at the time was a panel with a list of errors (not unlike what Eclipse and other IDEs would do a decade earlier).

I wanted to see errors in context instead. I found inspiration in how Rust renders compilation errors and warnings into the terminal: rendering a portion of surrounding code, and an ASCII arrow pointing to the relevant portion of code.

With the idea, I implemented lsp_lines.nvim, a plug-in that renders diagnostics between lines of code (using neovim’s “virtual lines” features) and renders ASCII arrows pointing to the code that produced the error.

Screenshot showing neovim with multiple errors rendered as described in this article
Screenshot of an early version, from the project's README.

A few years later, in early 2025, Helix gained this same feature. I have no idea if they found inspiration on lsp_lines.nvim, if it’s just a case of convergent evolution, or they found inspiration in Rust’s output the same way I did.

Later that month, Maria Solano ported my plugin’s feature to Neovim, making it a built-in feature. I’m immensely pleased to see this become a core Neovim feature, and enabling it is as simple as:

vim.diagnostic.config({
  virtual_lines = true,
  virtual_text = false, -- Disable LSP text.
})

Note: I also disable virtual_text, which rendered diagnostics at the end of the line. I never found this useful: it appended diagnostic text at the end of the line, truncated at the screen edge. Most diagnostics were never readable.

The feature was merged into Neovim and release in 0.11.0. All this before I wrote an introduction article for lsp_lines.nvim. So this is the intro article, and a farewell so a plug-in that served its purpose well.

Have comments or want to discuss this topic?
Send an email to my public inbox: ~whynothugo/public-inbox@lists.sr.ht.
Reply privately by email: hugo@whynothugo.nl.

— § —