
Vim's 25th anniversary and the release of Vim 8 - Iuz
https://lwn.net/Articles/713114/
======
a-b
Fun fact about vim:

When vi was originally designed the most popular keyboard was ADM-3A and later
IBM XT
[https://en.wikipedia.org/wiki/IBM_PC_keyboard#/media/File:IB...](https://en.wikipedia.org/wiki/IBM_PC_keyboard#/media/File:IBM_Model_F_XT.png)
The layout of this keyboard has Control on the place where modern keyboards
have a CapsLock key. Naturally that's why vi and vim was meant to use CTRL-[
to exit to the normal mode.

25 years later Apple introduced ToughBar and made ESC key virtual. As result
remapped CapsLock-[ make sense again ;)

edit: Add ADM-3A keyboard

~~~
lytedev
Why not use "jk" or "jj"?

~~~
eqyiel
What if you want to write "Dijkstra"?

~~~
farresito
Then you wait one second after pressing j (until the timeout is over) and
press k.

~~~
chillee
To be quite honest, that sounds terrible.

~~~
farresito
I don't think it's bad at all. I very rarely have to write 'jk', and using
that combination saves me from having to either reach the escape key or having
to use c-[. If the price I have to pay is waiting 0.5s (which is what I have
the timeout configured to) once in a while, then I consider this a great
tradeoff.

~~~
minitech
Caps Lock is one key, easier to type, and even more rarely used, though. I
highly recommend it. =)

~~~
chillee
That's what I use too :). I also highly recommend it. I would strongly
recommend binding either escape or ctrl to caps lock on every keyboard.

------
robteix
In the early 2000s, I was at a friend's place with John "maddog" Hall, who was
talking to a group of us about the future of software and the promises of
quantum computing.

He said something that I always found interesting. He was talking about how in
a decade or so we would probably be using software and tools that would be
unrecognizable to us at that moment, but after a pause he added: "but we'll
still be writing code with vi." :)

~~~
vkou
Having used Windows, Linux, Visual Studio, Eclipse, and Perforce in both the
early 2000s, and today, I'd daresay that they are quite recognizable. Much
more usable (Except for Eclipse), but still quite recognizable.

~~~
noir_lord
I'd agree with that.

I actually can't think of a tool I use day to day that I wouldn't recognise
from 20 years ago even the really good stuff would be obvious in it's intent
(intellij etc).

I'm not really sure where I'd be _able_ to improve significantly on day to day
tool usage, maybe a shell that doesn't use bash as the language would be nice
(I know there are other shells but bash/dash are the defaults on pretty much
everything I touch I can get to a command line on).

~~~
ThrustVectoring
Slack app on your smartphone?

~~~
wingerlang
That's just IRC on a small computer though.

~~~
noir_lord
Sometimes the 'just' is where the magic is, we all know that slack is just a
pretty irc that end users can grok.

That 'just' is worth a fee billion dollars though.

Makes you wonder if there are other tools in our world that could be a 'just'
away from a billion dollars.

~~~
wingerlang
Sure but I think that it is still recognisable, which was the question.

25 year ago isn't //that// long ago? People using IRC at that point (I guess
techies) surely would recognise it fairly easy.

Similarly you could look at a brand new Tesla and recognise it from a 1st car
model or even a wagon.

~~~
pvg
_People using IRC at that point (I guess techies)_

College students, mostly.

~~~
noir_lord
I think I first used it ~1995 so that would be 22 years.

Hung around for about 5-6 years and it's been around in the background ever
since, just got back into using it recently as one of the frameworks I use has
a decent IRC channel and an even more decent offtopic, nice bunch of folks and
with the ability to throw it in the background it gives a water cooler feeling
when I'm working on my own and need to bounce an idea of people.

------
a-b
Vim is great, but hard out of box. That's why I'd like to mention couple
community distributions to make it even better:

• [http://vim.spf13.com](http://vim.spf13.com) this distribution is
remarkable! Extremely well documented vimrc file is a great source of knowlege
by itself
[https://github.com/spf13/spf13-vim/blob/3.0/.vimrc](https://github.com/spf13/spf13-vim/blob/3.0/.vimrc)

• [https://github.com/carlhuda/janus](https://github.com/carlhuda/janus)

Also, it worth to mention

[http://spacemacs.org](http://spacemacs.org)

and

[https://neovim.io](https://neovim.io)

~~~
adtac
I understand why someone would want to start with a prefilled vimrc, but I
really can't stress enough how useful writing your own vimrc is. I started
with bits and pieces from everywhere on the internet, but one day, I sat down
and wrote my own vimrc. I realized I didn't even know 1/2^32th of the things
that were possible with vim!

~~~
DigitalJack
I used to customize vim quite a bit, but I got tired of trying to sync my
config across multiple systems, some behind corporate firewalls.

I run into this with TMUX too. It's a pain when you are used to your specific
config to the point that it's hard to use the default config.

I got into emacs when I started lisping, but vastly prefer vim's keyboarding
and macros. So when spacemacs came about, I jumped on board and love it. The
power of emacs and the sense of vim.

Plus, I don't have to customize spacemacs aside from enabling modules I
want... very easy to do. Very easy to keep in sync across multiple machines.

~~~
ThrustVectoring
If `git pull` works, I recommend just putting all your dotfiles in a git
repository. If `git pull` doesn't work, then you've got Problems.

~~~
Tenoke
Or you know, you're ssh'd into a machine, that other developers use, too; has
specific networking requirements, etc..

~~~
freehunter
Yep. I spend all day connected to machines that I have to access through a
jump server because they have no direct internet access in or out themselves.
No way is it worth it for me to customize anything there.

I realize that this is a pretty rare situation though.

~~~
CamTin
I find TRAMP
([https://www.emacswiki.org/emacs/TrampMode](https://www.emacswiki.org/emacs/TrampMode))
invaluable in these situations. It lets you run shells/edit files on remote
machines from within your local Emacs. There are a few quirks that you need to
get used to, but it makes Emacs + a bunch of regular Linux boxes into
something that feels very Plan-9-y.

In your case, you would want to look into the multihop settings that will let
you open files and eshells on remote machines, but use an intermediate machine
(your jump boxes) to get there.

------
jmcdiesel
I don't see why he felt the need to halfway add in package management, but not
go all the way. You still have to download the package and update it manually
from what i can tell... where the others you simply add a github path (or
other repository path) and updates come eaily, install comes easily.

Consider the case of people like me who work on remote servers, who spin up
new vagrant boxes and work on them remote... with the package manager as he
described it, i'd have to download all the plugins and manually place them,
etc... as i currently stand, i install vundle really quickly , then it just
reads my .vundlerc.bundles and installs all the plugins i want, presto. Half
solutions are worse than no solutions... because now people will compare the
two, and default (likely) to the default solution and make package management
harder on themselves than it needs to be...

~~~
hellcow
I don't understand your concern. It seems to me to be roughly the same amount
of work whether you A) install vundle and maintain a list of plugins for it to
fetch or B) write a bash script that fetches each plugin. I actually prefer
Vim 8's approach.

~~~
jmcdiesel
Because i can install vundle with a single line in my setup script (already
have a "provisioning" kinda script for each time i fire off a machine).

I dont have to update that script for new plugins, its a single "Vundle
user/repo" in the vundle.rc file. Vundle then installs it, and handles it.

Could it be scripted, sure... but its much more readable in the vundle form
(or other managers for vim), and its also in a more logical place... and its
portable, even to a windows machine... its kinda a separation of concerns
kinda thing...

~~~
hellcow
> I dont have to update that script for new plugins, its a single "Vundle
> user/repo" in the vundle.rc file.

You either add a single line to your vundle.rc file, or you add a single line
to your bash script.

~~~
jmcdiesel
Still doesn't address separation of concerns... if you prefer a single
monolithic script to do everything, thats cool, im not trying to change your
mind, but for my tastes, i want my provisioning script to be as simple as
possible, concerning only what it needs to, and let the apps configure
themselves in a way that is obvious to anyone who uses my scripts (a few of my
fellow devs use my stuff to bootstrap their setup)

------
shmerl
_> User demand for a multi-threaded Vim (e.g. a patch for supporting multiple
threads) and its rejection is what prompted the Neovim fork in January 2014.
In his presentation, Moolenaar concedes that Neovim did create some pressure
to add a way to handle asynchronous jobs. _

I switched to neovim a while ago, because it supported 24-bit color themes in
the terminal. Since then it seems even regular vim picked it up too. It's good
to see that some pressure moved the project forward in different areas which
were stuck forever before.

Though neovim already uses XDG base directory specification, but vim still
doesn't.

~~~
zer0t3ch
> Though neovim already uses XDG base directory specification, but vim still
> doesn't

Aaaaand now I want to switch to neovim.

~~~
mkingston
It's pretty effortless to switch. For me, I found: .vimrc was compatible (but
lives in .config/nvim/init.vim). Plugins were compatible (in fact,
YouCompleteMe worked better). There was a little bit of faff setting up
symlinks. In case you use Arch, it offers a package neovim-symlinks that
handles that for you.

~~~
zer0t3ch
Good to know, thanks.

------
a-b
Best place to start vim journey
[http://vimcasts.org/episodes/page/7/](http://vimcasts.org/episodes/page/7/)

~~~
hackermailman
CMU also has a pretty good guide/list here:
[https://www.cs.cmu.edu/~15131/f16/topics/vim/](https://www.cs.cmu.edu/~15131/f16/topics/vim/)

Links this great stackexchange post 'Your problem with Vim is you don't grok
vi' (Vim as a language) [http://stackoverflow.com/questions/1218390/what-is-
your-most...](http://stackoverflow.com/questions/1218390/what-is-your-most-
productive-shortcut-with-vim/1220118#1220118)

------
jmcdiesel
I love VIM... but I feel like VIM's life is coming to an end... as VIM. NeoVIM
is just... better. The editor as it stands now is essentially the same, but an
actual active development that isn's a single contributor is going to create a
better project, and its going to respond to the community more and keep itself
more up to date and performant.

I feel bad, in a way, because i have a strong loyalty to vim, but Bram's
stubbornness at playing well with others is basically holding onto sand, and
we know how that analogy goes...

~~~
sevensor
I used vim for 20 years, up until about a month ago when I tried kakoune. It's
got a new approach to modal editing that I really dig, which makes me realize
the thing I loved about vim was that for a long time it was the best modal
text editor around. I still think vim is a great project, but kakoune takes a
refreshing approach that really clicked for me.

~~~
hackuser
Don't hold back on us: What are the differences? The strengths and weaknesses?

~~~
sevensor
Fair question!

Grammar: kakoune is heavily oriented towards selections. Things that happen in
normal mode operate on the current selection. It's like using visual mode in
Vim, except it's always on. It takes a little getting used to, since any
cursor move changes the current selection. Part of its selection orientation
is excellent support for multiple cursors.

Platforms: POSIX only. No support for odd platforms. If you want to use it on
Windows, you have to use Cygwin.

Packaging: basically non-existant. You pull it from github and build it
yourself.

Maturity: kakoune doesn't have version numbers as far as I can tell. I've had
it crash on me, but it's rare.

Community: tiny but vibrant. There's #kakoune on freenode, which the core team
seems to monitor pretty actively.

Syntax highlighting: yes, and it's more flexible than vim's. You can use it to
roll your own colorcolumn, for instance.

Code folding and line wrap: these aren't there in kak, and I do miss them, but
not enough to go back to vim

Tmux integration: awesome in kak, absent in vim. One of my new favorite
things. In general, you can have multiple editors attached to the same
session.

Automation / configuration: There's no such thing as kakscript, which I see as
a plus. Nevertheless, you can do a lot of stuff here; I haven't scratched the
surface, but there are lots of interesting example kakrc files out there.

~~~
tux1968
Thanks for pointing out this project. It looks interesting.

Just to your point on packaging.. I googled and had it installed and running
on Fedora in about 5 minutes after reading your post.

There are individual instructions and packages for many distributions listed
here:

[https://github.com/mawww/kakoune#2-getting-
started](https://github.com/mawww/kakoune#2-getting-started)

On Fedora it was literally 2 commands to install:

$ dnf copr enable jkonecny/kakoune ; dnf install kakoune

And then just "kak" to run it and play around a bit :-)

~~~
sevensor
I suppose I must have seen those options and thought, "I might as well build
it myself." I stand corrected!

------
a-b
Ranked list of vim plugins [http://vimawesome.com](http://vimawesome.com)

------
Keyframe
This is one case where it feels a lot longer than that! I've used jot as
primary editor on SGI and emacs sometimes and always when on Sun machines. Vi
was always something I wasn't all that comfortable with. Then came about amiga
where I've encountered Vim and thought to hell with it, why not. Ever since
I've used Vim more and more and emacs less and less. In the meantime I've
stopped programming as a full time job and I think in the last 8 years or so
I've moved completely from emacs to Vim. With plugins I really don't see
working any other way on longer things. For smaller, scratch type of crap I
tend to dwell into sublime and experimenting with VSCode, but Vim is just,
well, it's an editing experience. Fells like it has been around forever,
probably due to vi.

------
ivanche
I just wonder whether in 2042 we'll read about 50th anniversary of this
masterpiece!

~~~
chengl
I hope we will

~~~
1001101
I hope so too! Don't forget:
[http://www.vim.org/sponsor/](http://www.vim.org/sponsor/)

"Since Bram is back to a paid job the money will now (after March 2006) be
used to help children in Uganda. This is the charity recommended by Vim's
author. The money is used for a children centre in the south of Uganda, where
AIDS has caused many victims. But at the same time donations increase Bram's
motivation to keep working on Vim! "

------
smhenderson
Congratulations Bram! 22 years ago I installed my first GNU/Linux distro and
tried both emacs^ and Vim. I ended up liking Vim better and I've been using it
ever since.

^ no disrespect to emacs though, it is also a great and venerable program!

~~~
innocentoldguy
I started using Vim on the very first release of Slackware, back in 1993, I
think. I've been using it ever since. Thanks Bram!!!

~~~
smhenderson
Cool, the first distro I mentioned in my post was Slackware, in 1995. It came
on cdrom with a book I picked up at the time. I think it took me a couple of
months of using it to realize the vi I was using was elvis, a clone that
Patrick shipped with Slackware by default. After reading about Vim and Bram I
realized I had to install Vim separately.

I'm back to Slackware these days after moving away from Debian because, well
there were reasons. Interestingly when I read this article this morning I
realized that true to form Slackware is still using 7.4 so I downloaded the
source and am compiling 8 this evening after work.

Thanks Bram indeed! :-)

~~~
bubblesocks
My first distro was Slackware, and I bought it in 1995 as well. Mine came with
a Unix book from O'Reilly. The only thing I remember about the book was a
quote at the top of one of the chapters, "Dyslexics of the world, untie!"

I too used elvis for quite a while, until someone at the bank I worked for at
the time introduced me to Vim. I've never met Bram, but I always feel a depth
of appreciation when I see his name pop up in the editor window.

------
6ftdan
Yay! I've been using this for quite some time now. I build from the master
branch on VIM's git repo for custom plugin support. There was a moment it had
issues with the FishShell before this official release but that's fixed now.

I've also built this into a remote programming Docker image:
[https://hub.docker.com/r/danielpclark/ruby-
pair/](https://hub.docker.com/r/danielpclark/ruby-pair/)

------
a-b
I'm wondering how many folks are using g& command ;)

It works great considering that

    
    
      :s//new_pattern/g
    

will search for last

    
    
      /old_pattern

------
CaliforniaKarl
I use Vim 8 (via MacVim) every day, but I'm definitely not at an advanced
level!

I'd say the most advanced stuff I do is gqap, and performing substitutions via
regex, either with a range or in visual mode.

I'd appreciate suggestions as to the best path to take, to move to a more
advanced level of Vim 8. (Note I mention Vim 8 explicitly. Also, if extending
my existing vimrc becomes a thing to do, I'd want to do it myself, learning
what each not does!)

~~~
bubblesocks
I found this book quite helpful in leveling up my Vim skills:

[https://pragprog.com/book/dnvim2/practical-vim-second-
editio...](https://pragprog.com/book/dnvim2/practical-vim-second-edition)

I can also vouch for the Vim + tmux combination. PragProg has an excellent
book on tmux too:

[https://pragprog.com/book/bhtmux2/tmux-2](https://pragprog.com/book/bhtmux2/tmux-2)

------
_nato_
Long-time vi[m] user, and always learning/amazement. This very morning I
learned about the `-c` flag. So, `vim -c "set spell" my-misspelled-file.txt`
starts up vim with a given setting.

~~~
unfamiliar
That seems like more keystrokes than just entering "set spell" after it
launches.

------
YeGoblynQueenne
Vimscript now has lambdas and closures!

Also:

[https://github.com/idanarye/vim-smile](https://github.com/idanarye/vim-smile)

Vim now has a ":smile" command :D

~~~
bubblesocks
I just picked up this book on writing Vim plugins and scripts:

[https://pragprog.com/book/bkviml/the-viml-
primer](https://pragprog.com/book/bkviml/the-viml-primer)

It has been good so far.

------
adtac
I wonder if we'll see software this timeless ever again.

~~~
oblio
Well, Visual Studio (via Visual C++) was launched 24 years ago, Photoshop is
26 years old, Word is 33 years old, Excel is 31 years old, Outlook is 23 years
old, Total Commander is 23 years old, Eclipse and IntelliJ are 15 years old,
etc.

I think we're in an age where distribution of software is so wide that the
market leaders, especially if they're Open Source, last for decades.

~~~
kevin_b_er
You might as well include vi then, which now makes this software product 41
years old.

