Vim is an upgraded version of Billy Joy’s VI text editor for Unix. It’s considered to be the most complex text editor by most of the programmers. It comes with not so standard keyboard shortcuts and strange behaviours for the keys. Every key seems to have a separate function defined to it. Just normal process of entering text seems so difficult that most people don’t even bother going further.

Learning Vim or Vi is a truly difficult task for new users as unlike most editor vim is a modal. You enter various modes to handle a task and it ends up doing a completely different thing. Here is a graphical presentation of just keyboard shortcuts.

Vim Cheat Sheet by ViEMU

Many keys here have multiple functions and have additional meaning in a specific context. Example i means ‘enter insert mode’ unless it is pressed immediately after another command in which case it usually stands for ‘internal’. This is just an example of one of the complexity. Vim has hundreds of short commands that can be combined to give result in a few amounts of time.

Vim makes thing faster and complicated at the same time. There was a reason Vim was designed in such a manner. The computer terminal keyboard had very few functionalities during those times. Like it lacked arrow keys which makes it difficult to move the cursor and do normal operations. The creator using it, over a 300 baud connection which meant that every keystroke would take literal seconds to register. So this would make every key you press or command you perform take a long pause to process and move further.

Hence Vi was super advanced and smart move to reduce the commands to a single keystroke. The technology limitations pushed Billy to create this piece of brilliance. It made a simple task like copying and pasting a lot more easier and faster in those days. You can copy and paste as a line with just ‘yyp’ where y means Yank and p means paste. Similarly, Vim commands are like a language here are few of them

c (change), d (delete), y (yank), p (paste), u (undo),w (word), s (sentence), p (paragraph), b (parenthetical block – something inside parentheses), i (inside), a (around), etc..

You can use a combination of these to create execute a more complex command. Moreover, Vim has lots of inbuilt plugins to simplify our work. Hence Vim made a lot more sense during those times and made the process faster.