You should ask, and answer, the question in reverse. What does neovim offer me, as a regular vim user? I don't see anything particularly interesting for my usage, so I don't have any reason to change. Also, some features are missing (like gvim-gtk, that I enjoy using to edit LaTeX occasionally).
Furthermore, as of today, plain vim has an aura of venerability due to Bram's legacy that neovim cannot match. So I'll stick with vim.
It would make sense to port back some of the most popular neovim features into vim. It is a good thing to have innovative forks that experiment aggressively with new features.
Well, one of the goals of neovim was to make it easier for new people to contribute.
So, there's an obvious feature you might be overlooking: the project surviving past its creators passing.
Beyond that, async, lua, lsp and treesitter support are other things neovim brings to the table. I don't use vim much anymore, but I know that neovim incorporated them first. If vim did follow on some of those innovations, consider how long it might take for new vim maintainers to get to a point where Bram needed to be to keep up, without his guidance.
I wonder if there is a need for both vim and neovim in the future. Neovim was born out of wanting to do similar things to what the vim maintainers are considering.
However, this was Bram's vision. We don't know how the new leadership will affect that.
Great point. I wasn't following vim much, so didn't know the context around the language changes.
That does seem like a core philosophical difference. I'm interested to see what the future holds.
Vimscript's dominance in vim is one of the things that got me to switch to emacs when I got interested in Lisp and Scheme more than a decade ago.
Sure, even then I could write scripts for vim using Vim's scheme compatibility mode, but I'd probably be one of the only ones doing so. Pretty much everyone else was using vimscript.
In Emacs the whole ecosystem is in eLisp, so I'd feel right at home there, could naturally integrate other eLisp codebases/projects, could easily get help on anything related to working with eLisp in emacs.
If I'd written scheme scripts in vim my work would always be a second-class citizen in the vim ecosystem.
How's the vim ecosystem now? Is vimscript still dominant?
You can have a full neovim experience with all sorts of modern extensions without using a single line of vimscript. Some people even replace their init (neovim's vimrc) with lua, but I am of the opinion that it is a step too far, as lua isn't particularly adapted to writing configuration files and the result is too verbose to my taste.
I use lua when examples are in lua or when I need some "logic" (such as assigning defaults to a var and then passing that around/overriding). And that's embedded in vimscript.
I don't really like either. VimScript has always been a horror to me, eventhough I've been using vim for some 20 years now, almost exclusively. Lua is "that thing that I should really sit down and learn. But not now, I've got stuff to finish".
What does lua -for an end user- offer that something like yaml+python cannot offer? I really won't mind setting all sorts of flags, defaults and vars from some init.yaml, and then have some init.py to handle the few places where I do need actual logic. Why was lua picked, why did vim build its own language and not move to an existing one for its config? Am I just weird for never sitting down and learning lua? Or vimscript? Or both?
Why Bram build is own language and then doubled down on it with vimscript9 I don't really understand.
[1] https://neovim.discourse.group/t/why-was-lua-chosen-for-neov...
What language would have you chosen in 1991 instead of creating vimscript? The vimscript language is a very natural extension[0] of Bill Joy's "ex" language, that was used in vi since 1976. The history of vimscript is not weird, it's just a fairly natural continuation of existing practices. Vimscript9 is a least-friction update for modern times.
[0] https://en.wikipedia.org/wiki/Vim_(text_editor)#Vim_script
According to your link scripting was only available from '98, at which point Lua and Python were already around, but then I don't know how viable that would have been. Funny you say that about ex, because I find running ex commands from vimscript the most clunky thing about it.
In my opinion the least friction for the ecosystem would have been to follow neovim and adapt Lua.
[0]: a Lisp that compiles to Lua, https://github.com/bakpakin/Fennel
The Neovim people went a bit further with the integration, but you've been able to use Lua with Vim for like 20 years or so, and you can use it to write perfectly functional plugins with it. Probably the main difference is that in Neovim Lua is always guaranteed to be available, which isn't the case for Vim.
Such base programs basically need to go through the Debian packaging gauntlet if they want to succeed.
What I mean by that is that generally they need to persuade distros to be anointed the "official" tool, i.e. Debian or Fedora would have to select Neovim as the new default text instead of Vim.
Then you need a few years for the changes to trickle down everywhere: Debian -> Ubuntu-> Mint -> ..., Fedora -> RHEL, ... After that distro releases need to be cut and people need to upgrade.
I think a full cycle, where a tool becomes ubiquitous if it gets adopted in the base installs, is probably 10 years. See systemd.
You're probably right. However, I think it's more likely that the Linux distros drop Vim entirely and make Nano the default editor than that they replace Vim with Neovim.
The BSDs have nvi as the default editor, IIRC, so they won't need to change anything.
At some point I tried to switch and some setting broke in my config (mouse mode?) I forget what it was. It took me another 3-4 years before I tried again.
If Vim got no new features, I wouldn’t care. If Vim became unmaintained but still available from distributions, I’d still use it. If Vim became unavailable (e.g. due to lack of maintenance) I’d be more likely to switch to nvi than Neovim.
I could probably switch to nvi now, but I have no reason to.
I care about this not because I used Vi (I never have) but because it’s less likely that some new Vim with a newer distribution release will do something I don’t expect. Vim does want I need it to do. I don’t want it to change.
Neovim on the other hand exists entirely to change things. That’s all well and good. I just don’t want it. My editor is complete.
I knew that maintaining compatibility was extremely important to Bram Moolenaar. I also knew that Neovim made a big deal out of removing “cruft” and old stuff they decided no one needed. I preferred Bram’s values.
Having to rely on them for that is a downside, but I guess you are free to fork nvim if they abandon that promise...
For my purposes, Vim is complete. I don’t require new features, as long as it is maintained and runs on modern OSes.
I copied .vimrc to .config/nvim/init.vim, did a :PluginInstall and was up and running.
If development of vim dropped and neovim was nominated as its successor, I'd think most vim users would be just fine.
Give a real alternative to those instead of the many quarter-implemented GUI shells that are really no better than running Electron, and the switch might be able to happen.
Not necessarily; if the two codebases are maintained by groups of people with incompatible ideas about how the code should work and what it should do, then keeping things separate is much easier.
> If development of vim dropped and neovim was nominated as its successor, I'd think most vim users would be just fine.
Agreed; they don't diverge that much from an end-user's perspective.
The terminal and async stuff has been "backported" to vim, as it were. But the plugin ecosystem is diverging. The other items are still open, and maybe those will move forward.
At this point Vim9 is the clearly superior language (don't hate me) since it's very domain-specific, while Lua has only very primitive hacky support. But the plugin ecosystems have diverged -- I don't see NeoVim coming back home without native Lua support, and I definitely don't want native Lua support in vim.
(I can live without cscope, since I no longer do significant C and mlcscope has been dead for aeons, though it's shocking that LSPs are still less capable in some respects.)
Mouse support in my terminal seems fine, even over ssh. Being able to do things like run it inside of a tmux session has always made it seem like the GUI would be a step back?
I know about rebinding to alt, but that doesn't work in all my terminals.
So for me, it's that one lousy thing that keeps me from switching. And if someone knows the magic setting to make it mimic vim, please let me know.
- Features I find useful have been removed.
- I dislike Lua, and significantly prefer Vim9Script.
- Gvim is useful at times.
[1]: https://github.com/vim/vim/discussions/12736#discussioncomme...
> Features I find useful have been removed.
Which ones specifically?
> significantly other Vim9Script
What do you like more in Vim9Script?
> Gvim is useful at times.
What are your use cases for the GUI?
If I look at some Lua plugins and compare that to some of my Vim9Script (or even "legacy VimScript") plugins then I think /Vim9?Script/ "wins" hands-down; it's just much more convenient for programming an editor. It also doesn't help that IMHO Lua isn't all that great of a language to start with – it's not horrible either, just not great.
On Windows gvim works loads better (even on Unix systems gvim is arguably better, because terminals kind of suck and you run in to loads of graphical and input limitations pretty quickly).
But in general: neovim doesn't offer me anything I want or need, I will have to spend time on migrating (e.g. my vimrc would error out, I need to deal with changed defaults, etc.), and for most things I prefer the "highly compatible" attitude from Vim/Bram, which is a trade-off that's not without its downsides, but I really like it (for most software).
I don't want to type like it's 1976. I want something simple and easy to use similar Notepad / gedit, but that still powerful when needed.
- Different servers may have different versions of the program. Some distros are very "stable" and have very old versions of programs.
- It's common (especially for vim) for users to have significant configuration files to make use easier.
vi is part of POSIX. That alone would be a reason to mantain Vim as a modern superset of vi.
It’s a basic infrastructure that you don’t want to break.
I think "if the script worked before, I want it to work later" has much more practical weight. Though, on the other side of practicality, I've heard sed, awk, and perl suggested for manipulating text in bash scripts far more than I've heard of vi recommended for the task.
$ rpm -qi neovim
package neovim is not installed
$ dnf search neovim
No matches.
I don't have anything against it, but prefer being able to use the same tool across environments.> Neovim is available through EPEL (Extra Packages for Enterprise Linux)
from https://github.com/neovim/neovim/wiki/Installing-Neovim#cent...
> Neovim is in Fedora starting with Fedora 25 > sudo dnf install -y neovim python3-neovim
from https://github.com/neovim/neovim/wiki/Installing-Neovim#fedo...
But alas, the motivation is not big enough for me to invest the effort.
Some features I'd like from Neovim are built-in LSP (but Vim has that thank to plugins), and tree-sitter based syntax highlighting.
That's not enough for me to move to Neovim.
Best of both worlds.
I do use NeoVim with a lightly-customized LazyVim setup on my personal desktop, but I don't use it much differently than I use Vim at the moment. I'm not a power-user, just someone who's comfortable enough with the keybinds that I leave :w everywhere when using a non-vi editor.
That's was the case for me. When I moved from vi to vim 25 years ago, I devoted a lot of time to customizing it for maximum developer efficiency. Around that time, I got a job where I regularly used five different HP/UX machines, a couple of Solaris boxes, and a few other random machines. At the next job, it was HP/UX, AIX, and IRIX. Few of those machines had vim at all, let alone a version compatible with the setup I had on Linux.
I eventually stopped doing the fancy things and settled into using plain vanilla vi, knowing that it would at least work consistently on every machine I used.
Since Vim 8 launched with a built-in package manager I'm able to store my vimrc and any extensions in git and easily grab it on any new machine I'm on. The level of effort required for me to convert to Lua and adopt newer nvim version of plugins I use seems too high relative to the benefits.
nvim --clean --startuptime /tmp/neovim
003.174 000.001: --- NVIM STARTED ---
vs vim --clean --startuptime /tmp/vim
004.274 000.001: --- VIM STARTED ---
Maybe your config had an impact on it, but config-free they're incredibly close.I abbreviated the output, if you run the above command and check the file, at the top it says
times in msec