The main difference is that vis is written from scratch while neovim inherited an old and hard to maintain code base.
This allows vis to experiment with various ideas:
- native multiple cursors/selection support
- structural regular expression support
- different core data structure resulting in efficient large file support
- LPeg based syntax highlighting
- Lua as an in process extension language
- client/server design (not yet implemented)
without having to care about backward compatibility and legacy systems. Of course this has also some drawbacks for example there is no existing plugin ecosystem etc
Great! I remember last time I looked at Vis it wasn't so far along (it had no Lua integration AFAIK).
When I started submitting code to Neovim my biggest desires for it were (1) Lua extensibility (2) A clean codebase (3) Compatibility with (most) Vim plugins.
Perhaps ZyX-l's Vim to Lua project (for Neovim) could help with (3) at some point, if that's desired.
An LPeg based syntax highlighting was also something in the back of my mind, though way down the priority list. Fantastic to see it implemented, it truly is the right choice (Neovim uses Corsix's C99 LPeg parser for its testing framework, automatically exposing headers in a way LuaJIT's FFI groks).
Does it build with LuaJIT? (Sorry for the perhaps stupid question, I've just glanced at your comments here and the terminal "video".
I'm not sure. I think a few Lua >= 5.2 dependencies have crept in, but it shouldn't be difficult to fix this if desired.
LuaJIT's FFI is indeed very nice, but it is unfortunate that Lua has essentially been forked after the 5.1 release. The current C->Lua interface has been manually written.
The parser will match the specified grammar exactly, like it should. You could of course specify a grammar that is broader than the actual language you are parsing.
Well, I am vaguely aware of the existence of "incremental parsers" and "tolerant parsers", and a code editor necessarily works on code that's only partially correct...
evil-mode lets you do things like "insert this text into the same position in a block of consecutive lines" using rectangular selections. I find it occasionally very helpful. It's a little clunky though: you make the selection, press I, edit the first line, press esc, and then the other lines get edited the same way. (I'm not sure what "the same way" means if you delete a bunch of text or move the cursor around while editing.)
I haven't used multiple cursors, but I imagine they'd let you do that, but with the other lines getting updated in real time, and without requiring the insert points to be neatly aligned.