Vim.
Tags: beginners
Published: 2020-01-13 14:29:20

Vim is a highly configurable, free and open-source, text editor and the fifth most popular developing environment in 2019. 

It's completely keyboard driven — which means once you get comfortable with the commands, you can edit at an incredibly efficient speed. There are vim plugins and extensions for the browser and for other popular editors like VsCode that allow you to use these same commands in other environments.

Vim seems to have something like a cult-classic kind of following. I remember when I began my coding journey, it was one of the first things I learned about and it felt like magic to me —

![](https://images.theconversation.com/files/162837/original/image-20170328-21254-1cddjy3.jpg?ixlib=rb-1.1.0&q=45&auto=format&w=496&fit=clip)

and was just as hard to figure out how to get out of...

*This* is a common memeable issue with beginner Vim users. You get into vim and you can't get out.

![](https://i.chzbgr.com/full/4169024768/h5280284C/)

Computer exit holodeck
Computer exit holodeck
Computer exit
Computer ? 

So first things first:

The command is `:q`
If you're in insert mode first `esc`
If you press `ctrl` + `s` and haven't disabled the sticky in your startup script, you'll have to press `ctrl` + `q` before you can then `:q`
`:` colons follow most commands 
and `!` at the end of a command forces it 
`:q!` is the equivalent of force quit

![](https://media0.giphy.com/media/HCBDuHiSJaMqQ/source.gif)

Vim is really useful and worth learning the basics of in case you need to use it. A lot of programs will have it as a default editing tool. The other day I was working on an AWS deployment and the shell used vim by default. Luckily, I already knew how to make the necessary exits, write and exit the program. 

I will be reviewing some of the basic commands found in vimtutor, but I recommend starting there if you're new to vim and maybe repeating it a couple of times in the beginning.^1

Other than exiting, 
1. entering
2. movement
3. insertion
4. deletion
5. writing (saving)
6. replacement 
7. undo/redo

are pretty important text editing needs you'll come across as a beginner vim user. 

Entering vim is done through the terminal, as a command `vim [filename]`
So vim with a new file name like `vim program-dixon-hill` would open a new, empty file and a vim command with an existing file name would open *that* vim file `vim holodeck`

To move around in vim you want to make sure you're in normal mode, not in insertion mode, meaning you can't type anything and use `j` to move down, `k` to move up, `h` to move left, and `l` to move right.

![](https://i1.wp.com/iangoprek.net/wp-content/uploads/2017/01/hjkl.png?resize=302%2C132&ssl=1)

When I say `insertion` mode vs. `normal` mode, Vim as 12 different editing modes, 6 basic modes w/ variations:

(This is from Vim's wikipedia page)^2

1. Normal mode - used for editor commands. This is also the default mode, unless the insertmode option is specified.
2. Visual mode - similar to normal mode, but used to highlight areas of text. Normal commands are run on the highlighted area, which for an instance can be used to move or edit a selection.
3. Select mode - works similarly to visual mode. However, if a printable character, carriage return, or newline (or line feed) is entered, Vim inserts the character, and starts insert mode.[32]
4. Insert mode - similar to editing in most modern editors. In insert mode, buffers can be modified with the text inserted.
5. Command-line or Cmdline mode - supports a single line input at the bottom of the Vim window. Normal commands (beginning with :), and some other specific letters corresponding to different actions (including pattern search and the filter command) activate this mode.
6. Ex mode - similarly to Cmdline mode, it takes a single line input at the bottom of the window. However, in Cmdline mode, entering a command exits the mode when the command is executed. Entering a command in Ex mode doesn't cause the mode to change.

Insert mode is entered by using `i` and allows you to type in the file.
You can use the arrow keys to navigate when insertion mode, but it's good to get used to toggling back and forth. HJKL are the basic movement keys, but you'll learn other ways of moving around quickly and efficiently in normal mode. For example `10j` would move your cursor 10 lines down in normal mode, `10k` would move you ten lines up. To escape insertion mode you use `esc` used for returning to normal mode from any of these modes.

Returning to normal mode, you can delete a character by moving the cursor under that character and using `x`. To delete an entire word, move to the beginning of that word and use `dw` for delete word. To delete multiple words, but not an entire line, use `d<number of words>w` like `d2w` would delete two words, `d3w` would delete three words — and so on. Type `d$` to delete to the end of the line and `dd` to delete the entire line.

To write or save what you're doing, `:w`. Using `:w [filename]` will write a new copy of that file under the given filename, but will not delete your old file. (There are many plugins to use with vim. Here's one I encountered researching this dilemma)[3]

To replace a character use `r` with the cursor placed under it just like you would delete. Capital 'R' will put you in replace mode, replacing each next character with the next one you type until you exit the mode.

To undo you would use `u` for a single change, `U` for the whole line. `ctrl` + `r` is your redo. Vim also keeps track of versions of a file, something like a Git history. I won't go into these details here, but look them up. Also, let me know in the comments below what your best practices are for this and general vim usage.

If you're like me and you like to use vim for other kinds of writing also, check out this vim for writers article. I usually use the WordProcessorMode plugin when I'm writing or editing something other than code and have found it super useful.[4]

![](https://66.media.tumblr.com/b1a4f737d9a02d8eccdaf8749322634d/tumblr_ovfi4iDUng1tuxekao1_400.gifv)


[1] a program literally called vimtutor and opened with the command `vimtutor` — once installed and run will provide a walkthrough tutorial that you can practice keyboard shortcuts by following along with. It's usually installed with vim, but if not, can be easily installed.
[*view on the web](http://www2.geog.ucl.ac.uk/~plewis/teaching/unix/vimtutor)
[2] [vim wiki](https://en.wikipedia.org/wiki/Vim_text_editor)
[3] [saveas plugin](https://www.vim.org/scripts/script.php?script_id=1928)
[4] [vim 4 writers](https://www.drbunsen.org/writing-in-vim/)
[more vim keyboard shortcuts](https://www.maketecheasier.com/vim-keyboard-shortcuts-cheatsheet/)