Beginner's Guide to Vim: The Aesthetics

Welcome to the second part of the Beginner’s Guide to Vim! In Part One, we covered the basic ways that you can navigate, insert text, and save a file in Vim. But it’s hard to ignore that the default editor has some... interesting... aesthetic choices.

Beginner's Guide to Vim: The Aesthetics

Welcome to the second part of the Beginner’s Guide to Vim! In Part One, we covered the basic ways that you can navigate, insert text, and save a file in Vim. But it’s hard to ignore that the default editor has some... interesting... aesthetic choices.

The default Vim style

The text is plain black (or white if you're in dark mode), there's no line numbers to be seen, and the indentation is 8 (!) whole spaces. The good news is, each of these properties, and more, can be customised using a little file that goes by the name of .vimrc.

Creating .vimrc

The .vimrc file lives in your root directory, and contains all the custom settings that get applied when you open up Vim. If you’re familiar with VSCode, it’s kind of equivalent to the settings.json file.

To open the .vimrc file from any directory, type this into your command line:

vim ~/.vimrc

If you’ve never opened this file before, it will be completely empty.

A brand new .vimrc file

So let’s add our first setting using our new Vim skills!

For our first setting, we’ll be enabling syntax highlighting. If you think about it, isn’t that the most basic thing you need from a text editor? How else am I supposed to tell that elif isn’t a recognised statement in C?

Get into insert mode in your .vimrc file (just hit the <i> key).

And type this into your file:

syntax on

Hit <Esc> to get into Normal mode, and save and close the file (:w <enter> then :q <enter>).

Our first setting in .vimrc: to enable syntax highlighting!

P.S. Putting a double quote (") will comment out the rest of the line.

Notice the changes haven't shown up yet. The changes will show up after you close the .vimrc file. So the next time you open something in Vim, you’ll be greeted with colourful letters!

C file with syntax highlighting

If you're thinking, hmm I'm not really a fan of these colours either, don't worry we'll get to fixing that soon :)

Just like Vim commands, there’s no way I’d be able to introduce you to every possible customisation in .vimrc. But, I can go through the ones I’ve found the most handy, and these should be a great starting point to begin your own experimentation!

Enabling mouse

There's no denying it, Vim is notorious for having a steep learning curve. Mostly because you have to train your hands to do everything from the keyboard. But what if I told you that you could in fact use your mouse?

The setting is:

set mouse=a

While some purists might be coming at me with pitchforks, I think of it like training wheels. If you're in a rush, you don't want to be looking up how to jump to the bottom of the file (which is <G>, by the way), or highlight the next four lines of code. Instead, you can always fall back to the mouse, which will let you do basic things like scrolling, and highlighting text.

More colours !

I would argue that the second most important part of a text editor is the colour scheme. And the good news is that Vim comes with plenty you can choose from. Before you decide on one, you can even try out all the ones available.

Get into Normal mode by hitting <Esc>, and then command mode by typing in:

:colorscheme

You can't see it above, but there's also a space character at the end.

Setting colorscheme

Now hit <Tab>, and you’ll see that the command autocompletes with the first theme.

The first default theme available is Blue!

Hit <Enter> to test out the colour scheme.

This is very blue.

If this isn’t really to your taste, we can try a new one! Do the same thing with typing in <:colorscheme >, and then hit <Tab> twice. Each time you hit <Tab>, it autocompletes the next available theme, and you can cycle through them all until you find one you like.

Industrial theme.
Delek theme

Setting the colorscheme in this way is completely temporary, and the colours will disappear next time you open something in Vim.

However, say I'm a personal fan of Peachpuff, and I want it to become my new default theme. I just need to type this into the .vimrc file:

colorscheme peachpuff

Also, confession: I prefer light mode when I’m coding. So I force Vim to always be in light mode using this setting:

set background=light
Default colorscheme now set to Peachpuff

Of course, if you prefer the dark side, you can just type in this instead:

set background=dark

And if the default Vim themes weren’t enough, you can also download custom colour schemes! But that could be a whole article on its own…

Indentation

Hitting <Tab> multiple times with every new line can get pretty annoying, especially if you’re four levels deep into an if statement. So we can turn on automatic indentation like this:

set autoindent

Now let’s address Vim’s crazy 8-space indentation. We can set the number of spaces in each indentation using shiftwidth:

set shiftwidth=4

Personally, I also set it so that every time I hit <Tab>, I’m inserting four spaces instead of an actual Tab character. I think there’s some old flame war between tabs and spaces, but all I can say is that this has never caused any weird issues for me. To do this, we type in:

set expandtab

If we have programs written by other people which use tabs, we want to make sure that they match the number of spaces with the rest of the code. The tabstop setting decides how many spaces a <Tab> shows up as:

set tabstop=4

Now, if we go back to our C file, things should look much more reasonable.

A C file with much more reasonable tab sizes.

Figuring out where you are on the page

When dcc tells me that I’ve got an error on line 373, I would very much like to know where that is. So I turn on line numbers like this:

set number

I can also tell where I am in the line, and how many characters are in a file using the ruler:

set ruler

The ruler shows up at the bottom-right of the screen and looks like this:

Ruler details are on the bottom right of the window.

The first number is the line number, and the second number is the column number of your cursor.

I'm also very prone to losing my spot in the file, and the block cursor can sometimes be hard to find (or it's just my eyesight). Either way, highlighting the line your cursor is currently on is super useful!

set cursorline
hi cursorline cterm=none ctermbg=255 guibg=#eeeeee

The result:

Now I won't ever lose my place in a file!

So to break down what these settings are doing, the first line enables the cursor line highlighting. Then, the second line is configuring its colour.

  • cterm - the default line highlight is really just a line underline. Setting cterm to zero removes the underline.
  • ctermbg - changes the background colour of the current line. 255 is a nice grey colour.
  • guibg - does the same thing as ctermbg, but this ensures that colours stay the same even if certain terminals might interpret the ctermbg colour differently.

Miscellaneous

I wasn't really sure where to fit this, but there's also a setting to enable text wrapping:

set wrap

This saves you from having to scroll sideways heaps if you've got a particularly long line of code (though, why would you if you're following the style guide...).

Next steps

Alright, so we made it! If you've followed along the whole way through, this is what your full .vimrc file should look like:

My .vimrc file

For me, these are the minimum configurations I need in order to enjoy using Vim. Did I miss anything?

As always, if you ever think: gee, it would be cool if Vim could look like <this>, an answer is just a Google away.

This also wraps up the Beginner's Guide to Vim series! Hopefully, these guides give you a reason to try and experiment with Vim for yourself. The beauty of this editor is that every detail is customisable, and there's probably a three keystroke command for anything that you would want to do. With so many possibilities, I encourage you to go out and search for the settings and commands that will make your life easier.