Skip to content

Instantly share code, notes, and snippets.

@fuzzygroup
Last active July 10, 2022 11:44
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fuzzygroup/8a5ad188e368df0796180d150eb41f67 to your computer and use it in GitHub Desktop.
Save fuzzygroup/8a5ad188e368df0796180d150eb41f67 to your computer and use it in GitHub Desktop.

Let's Look at Some Options

And now for the feature level comparison. I tried to write this as a traditional table comparing all features but the blithering ball of suck that is Jekyll and table layout left me in a rage. So there are 15 tables each of which focus on one element of the editors. The benefit to the multiple table approach is the selective winnowing down of options.

NOTE: If you want a good looking, well formatted version of this then please follow this link over to the gist version of this section.

Gist!

What's Being Actively Worked On

This looks at the editors by commit count and it pretty clearly shows you what is actively under development. With this analysis, we can reduce 8 editors down to 4.

Editor Commit Count Stars
amp 1,170 3.2K
glyph 50 68
helix 3,028 10.5K
hired 78 14
kibi 179 784
lapce 1,669 12.9K
Neovide 887 7.6K
pepper 3,133 247
Zed 1,200 1.9K
zee 137 1k

Sidebar: Each Editor Briefly Described

With the number of editors winnowed down from 8, I've now had some additional time to assess each editor and I can try and craft a coherent paragraph on each. Think of this as the tldr for each editor. My apologies to the project authors where I got stuff wrong; I know you all work hard on your project and I do appreciate it.

  • Amp -- A light weight character mode editor with a VI like feel.
  • Helix -- A very impressive character mode editor. It feels like there's a lot of tech under the hood.
  • Lapce -- A graphical editor with split screening and an embedded terminal. There is a lot of good stuff in the head branch of the git repo so it looks like it will be getting much better in the near future.
  • Neovide -- The only one I wasn't able to try. This is a graphical front end on top of NeoVim. Unfortunately Apple wouldn't let it execute either from Brew or a cargo build (cargo is the Rust build tool).
  • Zed -- A very impressive graphical editor and the one that is robust enough for me to use today. One of its most intriguing promises is the ability to edit files concurrently with another person. I suspect this is a pair programming style business model. Overall Zed having a commmercial focus is I think good because it argues for a long live span.
  • Zee -- A light weight character mode editor.

Editing Style - Vim or Emacs

I know this isn't listed above but it is one of the great Litmus tests for editors.

Editor Open
amp Emacs
helix VI
lapce Graphical; modal mode for VI fans in settings(1)
Neovide VI
Zed Graphical; configurable key bindings although rough - keymap.json file
zee Emacs

Normally I'd toss out anything Emacs style right from the jump but it is already a small pool.

1 - source: Jakub Panek on Twitter

Graphical vs Character Mode

Editor Graphical
amp N
helix N
lapce Y
Neovide Y
pepper N
Zed Y
zee N

Note 1: I left Zee in here because of its 100 fps claim. Performance really matters; they get props for realizing that.

Note 2: With exactly 2 graphical editors, I have to relax this criteria (perhaps).

Note 3: Neovide is graphical but it is also a VIM style editor (technically a front end to NeoVim) so the graphics are minimal (but if you are a VI person that's what you want).

Basic Conformation to Platform Conventions

Computing platforms have a style and conforming to that style / conventions matters.

Editor Graphical
amp N
helix N
lapce N - Only a single menu; File picker responds to ~ but doesn't allow pasting in a path
Neovide ?
pepper N
Zed Yes; Clearly early days but going the right direction
zee N

Note: Given that nothing conforms to platform conventions, either I give up and go home or plow on and accept change.

Lapce gets huge props for integrating a Terminal into its environment giving a very integrated feeling.

Neovide - I couldn't try it so its hard for me to say but it appears to follow platform conventions as much as you can while being true to VI styling.

Zed gets huge props for being recognizably a modern style programming editor. I had no issues conceptually mapping it in the Sublime / TextMate school of design.

Invoke from Command Line and Open Directory

Editor Open
amp N
helix YES - Beautifully implemented; Kudos
lapce There is a basic CLI interface in HEAD not yet released so its coming!(1)
Neovide Y
pepper ?
Zed Y
zee ?

1 - source: Jakub Panek on Twitter

Note: There is an Install CLI option and while it didn't have feedback at all, once I did it and typed:

zed .

The directory I was in opened instantly; beautiful.

Useful for Documents

Editor Open
amp ?
helix ?
lapce N - Seems to be a single editor window only
Neovide Y
pepper ?
Zed Y - it even highlights markdown syntax; swoon
zee ?

Syntax Highlighting for Ruby

Editor Open
amp Y
helix Y
lapce Y
Neovide ?
pepper N
Zed N
zee N

Note: I'm really not sure why I'm not getting syntax highlighting more and I'm worried that I'm doing something wrong. The lack of it deeply surprises me in programming editors. Perhaps it is a generalized shift to LSP support; unclear.

I was really quite sorry to see Pepper drop out here. I originally made a mildly snarky comment about Helix and I apologize for that and the error was mine. This was a configuration issue and Helix has an interesting approach:

  1. Fetch the grammars
  2. Build the grammars
  3. Symlink the grammars
  4. Diagnose any configuration issues via hx --health

This is documented on their setup page and with the energy and foolishness of a rant, I missed the Symlink step. Blaz the author of Helix reached out to me and helped me through it. Helix has a great set of grammars with a wc -l reporting 93 distinct grammars.

Keystroke macro recording

Editor Open
amp ?
helix ?
lapce ?
Neovide ?
Zed N
zee ?

I wasn't able to confirm this on any of the tools. This is one of those arcane features.

Autosave on focus lost

Editor Open
amp N
helix N
lapce N; maybe it has it but if so it isn't easily discoverable.
Neovide ?
Zed N
zee N

This doesn't seem to be in any editor. However, as much as I believe in autosave, if the underlying editor is actually stable then it matters less.

IMPORTANT: However not only is Auto Save lacking but Lapce allows you to quit without prompting for save. I only just discovered that or I'd have cut it from the options right here. That's not just user hostile but basic hating on the user (imho).

Extensibility

Editor Open
amp Unknown
helix Unknown
lapce Unknown
Neovide Y
pepper Unknown
Zed Unknown
zee Unknown

Yes I need to do more research here. I freely admit that I punted on this one as I've spent far more time on this than I wanted.

Window Menu that Lists All Windows

Editor Open
amp N
helix N
lapce N - Lapce skips this by only having 1 menu!
Neovide N
pepper N
Zed Y
zee N

The reason for specifically listing this feature is that I'm also running Warp.dev as a terminal manager and it is written in Rust and the bizarre feature omission is a Window menu that lists all the windows.

Configurable keystrokes

Editor Open
amp ?
helix ?
lapce ?
Neovide Y
pepper ?
Zed Y
zee ?

As with extensibility, I punted on this one. I was only able to confirm this for Zed but I suspect it is coming down the pike for Lapce.

Fuzzy Finder

Editor Open
amp ?
helix ?
lapce N
Neovide ?
pepper ?
Zed Y
zee ?

I'm pretty sure this is in at least Helix and Pepper but I didn't specifically use it. I did use this in Zed and it worked perfectly. Zed also had the more traditional C language style Go to Symbol / Definition stuff you use for C / Java style programming.

Cross File Search

Editor Open
amp ?
helix ?
lapce Y (1)
Neovide Y
pepper ?
Zed Y
zee ?

I'm unsure of this feature because, honestly, I couldn't really find info on it.

1 - source: Jakub Panek on Twitter

Discoverable Features

Editor Open
amp N
helix N
lapce N
Neovide N
pepper N
Zed Y
zee N

None of these editors are particularly discoverable. The lack of overt user interfaces means they get out of the way but that has a cost of making features unknown unless you really dig in -- and you aren't likely to dig in when you can't tell if it has the features you need.

Fast

Editor Open
amp Y
helix Y
lapce Y
Neovide Y
pepper Y
Zed Y
zee Y

Uniformly these felt fast. Hooray!

Side by Side display

Editor Open
amp N
helix ?
lapce Y
Neovide ?
pepper N
Zed Y
zee N

Treat Buffers as Virtual Paper

Editor Open
amp Y
helix N
lapce N
Neovide Y
pepper N
Zed Y
zee N

With none of the editors supporting save on loss of focus, I wouldn't come close to thinking I could use them in this way. Auto Save, in 2022, should be a default (imho). To paraphrase the great Ted Nelson who said something like "Real people trust the car to shift itself", I would argue "Real people trust the editor to automatically save".

LSP Support

Some reached out to me on Twitter and confirmed that Lapce does have LSP integration -- "although we don't have much LSP plugins yet, only Rust/Go/Clangd". That's awesome and I'll be sure to experiment with it.

Digging through Helix docs brought up the issue of LSP (language server protocol) support and the hx --health command. Here is how it looks on my machine:

❯ hx --health
Config file: default
Language file: default
Log file: /Users/sjohnson/.cache/helix/helix.log
Runtime directory: /Users/sjohnson/.cargo/bin/runtime

Language                            LSP                                 

bash ✘ bash-language-server
c ✔ clangd
c-sharp ✘ OmniSharp
cairo None
clojure ✘ clojure-lsp
cmake ✘ cmake-language-server
comment None
cpon None
cpp ✔ clangd
css ✘ vscode-css-language-server
dart ✘ dart
devicetree None
dockerfile ✘ docker-langserver
edoc None
eex None
ejs None
elixir ✘ elixir-ls
elm ✘ elm-language-server
elvish ✘ elvish
erb None
erlang ✘ erlang_ls
fish None
gdscript None
git-attributes None
git-commit None
git-config None
git-diff None
git-ignore None
git-rebase None
gleam None
glsl None
go ✘ gopls
gomod ✘ gopls
gowork ✘ gopls
graphql None
hare None
haskell ✘ haskell-language-server-wrappe…
hcl ✘ terraform-ls
heex None
html ✘ vscode-html-language-server
idris ✘ idris2-lsp
iex None
java ✘ jdtls
javascript ✘ typescript-language-server
jsdoc None
json ✘ vscode-json-language-server
jsx ✘ typescript-language-server
julia ✘ julia
kotlin ✘ kotlin-language-server
latex ✘ texlab
lean ✘ lean
ledger None
llvm None
llvm-mir None
llvm-mir-yaml None
lua ✘ lua-language-server
make None
markdown None
meson None
mint ✘ mint
nickel ✘ nls
nix ✘ rnix-lsp
nu None
ocaml ✘ ocamllsp
ocaml-interface ✘ ocamllsp
odin None
openscad ✘ openscad-language-server
org None
perl None
php ✘ intelephense
prisma ✘ prisma-language-server
prolog ✘ swipl
protobuf None
python ✘ pylsp
r ✘ R
racket ✘ racket
regex None
rescript ✘ rescript-language-server
rmarkdown ✘ R
ron None
ruby ✔ solargraph
rust ✘ rust-analyzer
scala ✘ metals
scheme None
solidity ✘ solc
sql None
sshclientconfig None
starlark None
svelte ✘ svelteserver
swift ✔ sourcekit-lsp
tablegen None
tfvars ✘ terraform-ls
toml ✘ taplo
tsq None
tsx ✘ typescript-language-server
twig None
typescript ✘ typescript-language-server
v ✘ vls
vala ✘ vala-language-server
verilog ✘ svlangserver
vue ✘ vls
wgsl ✘ wgsl_analyzer
yaml ✘ yaml-language-server
zig ✘ zls

Helix did find solargraph which gives Ruby LSP support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment