Vim after Bram: a core maintainer on how they've kept it going
thenewstack.io
thenewstack.io
I think it's silly when colleagues point out that VS Code has vim bindings. The bindings are what I know and enjoy, but they're only half the point. I like to work with the machine, in the terminal. I don't like my text editor being a browser that pings M$, and will end up doing so again, eventually, even after I have to search up(!) how to disable it.
There's a lot of value in moving slow and not breaking things. I'm glad there are maintainers willing to carry that spirit forward.
Either way thank you! Now I have even less reason to notice.
Luckily it's very easy to add one, e.g.
function! HighlightWordUnderCursor()
if getline(".")[col(".")-1] !~# '[[:punct:][:blank:]]'
exec 'match' 'Search' '/\V\<'.expand('<cword>').'\>/'
else
match none
endif
endfunction
autocmd! CursorHold,CursorHoldI * call HighlightWordUnderCursor()I can probably take the vimrc and workflow I had for Vim 6 back in ~2000 and use it in the latest Vim without any changes or problems.
And look, if VS Code or whatever works better for some people: great! Fantastic that works for you! But for me, the dedication to compatibility and not breaking existing use cases is something I've really come to appreciate, even though it's a slight annoyance at times.
There are plenty of legacy systems around that needs to be maintained and if you can use an efficient and familiar tool that still works in that context that should help such use cases greatly.
(perhaps "ancient" was a bit of an exaggeration by the way; "old" is probably better).
But every time I think about learning vim I always go back to the argument that it's just a tool to get a job done and right now, I'm very good with one particular tool (vscode) and between my dayjob and other responsibilities I just can't justify the time sink to learn vim to a level where I can be "professionally productive". For now I mainly use it for git and the occasional markdown document I need to create on the fly
But beyond that I really admire vim and nvmim. The fact that my coworkers can use a 30 year old text editor and extend it to support the latest and greatest LLM's and language servers is just mental to me.
I hope Bram is up in heaven right now, teaching god how to quit vim.
It’s a fantastic book that really gets into developing the right mindset to use it. It´s great once you “get it”, but it’s a different concept from the rest of text editors. Once you learn the basics, you’ll do great advancements in little time.
To me, it’s the best tech book that’s I’ve read. It’s really that good.
[1] https://pragprog.com/titles/dnvim2/practical-vim-second-edit...
Yet, I agree, if you must use VSCode, IntelliJ, Sublime, Emacs, etc. - you don't have to unlearn your vim skills. What's great about vimming - it's like riding a bike, you learn it once, you can do it anywhere.
[0] I personally wouldn't like to be tied to a tool that phones home to and is by Microsoft, but plenty of people don't care; so long as it's an informed choice that's completely legitimate.
Tools are tools; their value is not so much with the features they carry but with our abilities to utilize them with joy. If someone perfects their workflows using notepad.exe, telling them something is wrong with that is like forcing a grown-up to "eat properly" even though they've been holding their spoon since childhood in their left hand, like a pencil.
If you try, however, to focus not on the tools themselves but the big ideas they convey, that might change your perspective on many things. At some point, after many cycles of frustration, amazement, inspiration, and awe, you will learn to appreciate certain ideas.
You are right to admire Vim - its main idea of modality is a wonderful, beautiful, powerful, and pragmatic model. I, for example, even though these days rarely use Neovim itself, consider myself "a diehard vimmer". I use that model everywhere - in my terminal, my editor, my browser, system-wide - with my window manager. For example, I control the volume, playback, and speed of my videos and my music with home-row keys. The incredible instinct and dexterity one can build over time can be mind-blowing. It's not about "building a discipline to not touch the mouse or arrow keys"; it's about realization that you can do without them - "do not try to bend the spoon...", etc.
Some other tools also exhibit the use of great ideas. Emacs builds on the cornerstone of a different, yet incredibly powerful idea - the idea of practical notation for lambda calculus, which is known as Lisp. Lisp probably can be crowned as one of the most important ideas in computer science. Understanding it makes it hard to think of anything more influential than Lisp. Any programmer who dismisses the idea of Lisp based on one concrete implementation of it is misguided.
VSCode carries the idea of an editor built on top of a browser, which turns out to be not so bad of an idea, after all. Cursor - the idea of tight LLMs integration, etc. And it's not just the editors and IDEs; take any of these and you find some beautiful ideas behind them - Unix, Git, Make, Jupyter, React, Docker, SQLite, Org-mode, etc. Each of these tools embodies a fundamental idea that has proven influential and valuable in computing.
Borrow good ideas, try them, practice them, implement them into your life, expand upon them. Understanding the core of the ideas is empowering. And often it liberates you from the burden of specific implementations - i.e., you don't have to use Neovim to appreciate the idea of Vim.
Maintenance mode is a good place to be IMO. I don't think anyone looking at a codebase with this maturity should feel "why aren't there significant new feature updates".
Wayland, ok I can see there are things which need 'bring into the modern era' but I don't think either Wayland, or XDG represents a massive about-face or fork moment. (I don't use graphically aided editors either vi or emacs, I live in terminal emulated space)
The moment of fear is when it ceases to be brought into current packaging by the distributions which re-factor it. I don't see any sign of that happening either.
Rarely the case, and rarely acknowledged, but almost everything is a tool. If everything followed the Unix principle rather than trying to constantly grow and pivot, we would have a lot more solutions that just work.
The more often people think about things as tools under the Unix principle, the (generally) less user hostile they are.
What might be a big difference though and a big enough stumbling block to prevent merging is the fact that neovim code base has been refactored extensively and updated. Having worked in a big project that was refactored without me, and then returned, it is actually worse than a new code base because you feel like you should know where things are, but they aren't there. It continually misleads you and wastes your time. I could see that frustration being enough to keep the them proper people from merging or moving to neovim.
I doubt many 1980s mainframes were ever capable of running vim. People on 80s mainframes generally used mainframe text editors such as ISPF Edit (on MVS) or XEDIT (on VM/CMS)
Vim’s makefile does have support in it for compiling on Amdahl UTS, Amdahl’s Unix port for IBM-compatible mainframes, and so possibly vim could have run on an 80s mainframe running UTS. However, I’m sceptical there are any mainframes left running UTS anywhere on this planet-nobody uses it in production any more (apparently the last production users were some US telcos in the first decade of this century). I doubt any of the small number of still-working 80s/90s IBM(-compatible) mainframe systems in hobbyist or museum hands run it. There is a version available online you can run in an emulator, but it is an ancient version from the 1970s, whereas I believe the vim port is to a newer 1990s version-and I don’t believe any of those newer UTS versions are publicly available-either they survive in some private collection, or they’ve already been lost to the sands of time.
Nailed it. Bram made the decision on his own and vim's fate is stuck with it. I was bitter about it but now I think it's best for both communities.
Not likely. The directions for the projects seem pretty distinct.
It should be noted that some original vi are still installed by default when installing some OSs.
The whole idea that a project needs to be in constant new-feature mode is just not reality. Just as one example: I'm still using the fluxbox desktop (about 25 years now), and it still meets my top level GUI needs for interacting with my workstation. I don't really _want_ it to change. I want the UI to be exactly the same after an update, so as not to disrupt my workflow.
Just like vim replaced vi, neovim will gradually replace vim. Being maintenance-mode software means only greybeards (and some stubborn holdouts) will stick to it over time and as greybeards retire, the new maintainers of linux distributions who are more familiar with neovim will make their choice.
Vim is expected to continue to work everywhere, even on some bank's circa 1980 mainframe. NeoVIM has become an effort to revitalize the project. Support for ancient systems was tossed almost immediately (eg no more 8.3 filename support code). NeoVIM also included some much improved default configuration values.
Continuity I get, but how much are we collectively burdened by having a few ancient uses determine the wants of the many?
Lots of designs from the past can no longer connect to the internet in a meaningfull capacity but new hardware today might meaningfully last far longer than the developers could even anticipate.
It's not that I actively hate anything that isn't a recent 64-bit Unix, but that the people on other systems are either 1) hobbyists who are competent to port stuff to their own systems, or 2) companies who aren't paying me for extraordinary support.
Bummer if something I wrote last week doesn't run on HP-UX, but it's not going to cost me sleep.
Because of neovim and the power of forking, essentially nothing. The ones who favor stability choose one program, the ones who favor bleeding-edge chooses another that matches.
Also you probably want ed (the standard text editor) for POSIX compliance. (Fun fact, vi is not required by POSIX, so you will not find it on every single POSIX compliant host.)
This seems very unlikely. In neovim help docs there's a paragraph in file `nvim.txt`
Nvim is emphatically a fork of Vim, not a clone:
compatibility with Vim (especially editor and Vimscript
features) is maintained where possible. See |vim
differences| for the complete reference of differencesfrom
Vim.
nvim maintainers believe the project diverged and compatibility is best effort at this stage. Essentially, there's no plan to merge the two projects at this stage and the benefits are not evident.I hope that if they do merge that the connection to ICCF Holland is maintained.
Every time you start vim (without specifying a file) you see the message "Help poor children in Uganda!". It's been a salutary thing over the years to see Bram building something as amazing as vim and maintaining the commitment to helping orphaned kids in Uganda, I would be sad if that disappeared under the neovim bus.
If you're a vim user and you'd like to support Bram's vision, here's the link https://iccf-holland.org/donate.html .
In the race to incorporate AI in everything, it has turned me away from tools such as VSCode, IntelliJ. Instead have reverted to use of vim/nvim, setting up my own development environment, customizing it to my liking with desired mappings, and enhancing with plugins on an as needed basis.
Even with all of my customizations, code completion is still snappy (since it’s lazily loaded), and I do feel more productive compared to GUI editors.
Only downside is collaboration with coworkers that have always learned to use a GUI editors. In those cases I just open up whatever text editor corp uses (most cases it’s just vscode).
Although for co-workers I dislike, I do love to see them struggle to use vim.
After trying to replicate that exact folding method in many editors, the only editor that did it is vim with the kent extensions.
So... Thank you Bram and thank you to those who made the kent extensions.
LWN coverage of what I'm guessing is the same talk.
Remap the Escape key to CapsLock else you will never like vim (provided you are a normal person)
It's the most important key and you should punctuate all your inserts with it. So it'd better not be the key that's the furthest away from your fingers. The reason that's the case is an historical accident.
Don't be a victim. Remap.
P.S : Yes, I know about people using Ctrl+[, or Ctrl+C, I know you got used to it but one gets used to anything, it does not mean it's good. A weird combination isn't great and Ctrl + C has some quirks --> https://vi.stackexchange.com/questions/25764/use-control-c-i...
P.P.S : Yes, I know about `jk` it's clever ok but my mapping is system-wide and now I enjoy Escape being at the right spot for bash, zsh, fish, gdb, firenvim vim modes at no configuration cost.
As an aside; if you do the mapping system wide - it's useful everywhere - caps lock is useless everywhere, and Escape is marginally usefull in general desktop usage. I do ctrl-a-ctrl-a tmux 100x/day to swap panes; and ctrl-u in terminal countless times. Minimizing finger movement on all the little things is valuable. That said; I've also become a fan of home row mods also.
I had to upvote, even though I totally disagree, just because it made me laugh out loud (not lol, actually laughing, you know, like when noise comes out of your mouth)
I've been saying for years, that as soon as the matrix spinal tap was available, people would be lined up to get it.
Reality is so boomer! Who wants to remember things when we can immerse ourselves in our pure make-believe identity. 8-)
I really really am so glad I grew up before internet brain damage destroyed the concept of individual autonomy.
Some people already live this (see dissociative identity disorder)
dap /^fu cw
Seriously?
The mechanics of "procedural memory" (or as commonly called "muscle memory") is a complex, still not-well understood topic. We still years away from understanding how brain converts conscious actions into automated motor programs. BCIs (brain-computer interfaces) like Neuralink, even though can feel amazing, still can't artificially replicate true procedural memory formation.
As long as the keyboard input remains relevant, vim-model will remain the most ergonomic, fastest, attainable and pragmatic model for text-editing and navigation.
I think if you sneakily put me on Vim 7.5, I might not notice.
LSP integration works as well as a given language engine has implemented it. I’ve got an autocmd group that automatically binds keys if that language’s corresponding LSP compiler is on my system. So with something like Rust or Go, I open the file and just go (no pun intended).
When I am trying out a new language, I just add a few configuration lines to my vimrc and all the bindings work automatically.
For non-LSP langs (or those with heavy servers) I use good ol’ ctags and grep, which is my preference anyway.
vim has been rock-solid for a while now and I can count on it not to break (or to break my configs!). I think very carefully about my workflows over time and deliberately configure the editor for exactly how I actually use it.
Snark apart, praising vim without mentioning escape key remapping is criminal imho
Hehe. Evil users are vimmers. Evil stands for - Extensible vi layer for Emacs. Try Emacs for a while, and you may realize - Emacs can vim better than Neovim.