Oh no! Another vim post! Well... yes. I have seen a lot of people criticizing vim before even trying it, so I am going to try and explain my history with it and what I like about it. If you aren't aware, vim is a text editor that is normally used from the command line (and, normally, the mouse doesn't work in it or is deactivated).
Getting into vim
When I first saw people that got around a computer with the keyboard, I realized
how much faster you can do stuff when you don't use your mouse. By that time, I
used the copy/cut/paste shortcuts and that was pretty much it, I didn't even use
Tab to change between windows, so I was mindblown when I saw people
moving around so quickly without touching the mouse. For me, the keyboard was
simply a tool to write text.
Although I realized that being more familiar with the keyboard would make me more efficient, it was hard to get used to it. I had to think before every keystroke, and everything was very slow. GNU/Linux helped a lot with getting more used to the keyboard, not only did I use a couple more shortcuts, but I also found myself using the terminal often.
At some point, a friend introduced me to vim. I remember1 seeing such a
weird program—and in the terminal!—and thinking: why would anyone use that?! I
was told that there were a lot of shortcuts, and experienced programmers could
move through a file very quickly with it, as well as do complex operations with
the file contents. I believed it, but I didn't want to spend years mastering
vim, so I kept going with a simpler text editor. A couple of months later, I had
a programming class where the teacher would sometimes show us his screen while
writing solutions to exercises. He was fast, very fast. He moved around the file
very quickly and the craziest part was that he was using Geany. All that speed
was reached with
End, arrow keys, etc. No real shortcuts. I think
that is the point in time when I understood what a program focused on keyboard
shortcuts (like vim) had to offer.
Since then, I have tried vim many times and, truth be told, it is hard to start with. I also didn't code a lot during certain times, and when I had to, I just wanted to get stuff done, so finding times to figure out vim wasn't as easy. Another friend recommended using vim when editing Latex files because of a plugin. I was creating Latex documents for some classes so I used vim for a while to edit those files2. This is how I started to be able to do some things in vim. I eventually started managing servers and used it more and finally, at the start of the confinement, I decided to use it exclusively. It took some time adjusting to it, but I haven't opened any other editor except for a couple of occasions.
What I like about vim
The first thing that I like is that it is a modal editor, meaning it has modes:
you are always on one mode, and the editor responds differently to keypresses
depending on the mode. The two most basic modes are normal and insert. Insert
mode responds to keypresses like you would expect from a text editor: if you
x is appended to the file you are editing, and so on. Normal
mode, however, will not print the letter you just typed. For instance, if you
x the letter under the cursor will be deleted, and if you press
cursor will move to the first character of the next word. This is great because
there are a lot of shortcuts on normal mode that are incredibly useful, and let
you move around the document without the need of leaving the home row or
pressing modifier keys.
Now, normal mode has a ridiculous amount of shortcuts, each key has some behavior assigned to it, so it can be hard to learn it all. In the end, it is only a matter of practice and it is easier than it looks like. On top of that, these shortcuts act like a language, which makes them really powerful. With that, I mean that shortcuts can be mixed to create new shortcuts. It is hard to explain and there are a lot of explanations online, so I will refer you to two sources, and you can keep investigating if you are interested:
- Your problem with Vim is that you don't grok vi: A very detailed Stack Overflow answer.
- Mastering the Vim Language: A YouTube video of a talk in the Boston Vim Meetup of 2015 by Chris Toomey.
This is it for me. The fact that you can do so many things with the keyboard
without the need to keep
Alt pressed and do them in such a natural
"language" is what makes vim the best editor I have tried so far. Of course, you
can make other editors behave like vim (vi really), but vim is the best
one I've tried. Well... I actually use neovim, but for my use-case, I
probably wouldn't be able to tell them apart.
There are still a lot of things left for me to learn about vim, especially when dealing with a project with lots of files, but I am now more comfortable with vim than with a normal editor where you move around using the mouse.
As you can see from this post, what I appreciate the most of vim is how it behaves, so I could easily change to another editor that would copy this behavior and add other features. It is useful that it is run on the terminal, as it is normally how I move around the computer, but I don't have anything against other editors. I also want to try Emacs again at some point (with Evil mode, of course), we'll see how that goes!
This is how I remember it, but it was—I think—three years ago, so it might not be completely accurate. ↩
The plugin is really nice (especially when writing big amounts of text), but I was so uncomfortable with vim that I would write everything in vim and then edit/review it with a different editor. ↩