INTRO
Simple text files are at the heart of Linux, so editing these is a key sysadmin skill. There are a range of simple text editors aimed at beginners. Some more common examples you’ll see are nano
and pico
. These look as if they were written for DOS back in the 1980’s - but are pretty easy to “just figure out”.
The Real Sysadmin<sup>tm</sup> however, uses vi
- this is the editor that’s always installed by default - and today you’ll get started using it.
Bill Joy wrote Vi back in the mid 1970’s - and even the “modern” Vim that we’ll concentrate on is over 20 years old, but despite their age, these remain the standard editors on command-line server boxes. Additionally, they have a loyal following among programmers, and even some writers. Vim is actually a contraction of Vi IMproved and is a direct descendant of Vi.
Very often when you type vi
, what the system actually starts is vim
. To see if this is true of your system type, run:
vi --version
You should see output similar to the following if the vi
command is actually symlinked to vim
:
user@testbox:~$ vi --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Oct 01 2021 01:51:08)
Included patches: 1-2434
Extra patches: 8.2.3402, 8.2.3403, 8.2.3409, 8.2.3428
Modified by team+vim@tracker.debian.org
Compiled by team+vim@tracker.debian.org
...
WHAT IF I DON’T HAVE VIM INSTALLED?
The rest of this lesson assumes that you have vim
installed on your system,
which it often is by default. But in some cases it isn’t and if you try to run
the vim
commands below you may get an error like the following:
user@testbox:~$ vim
-bash: vim: command not found
OPTION 1 - ALIAS VIM
One option is to simply substitute vi
for any of the vim
commands in the
instructions below. Vim is reverse compatible with Vi and all
of the below exercises should work the same for Vi as well as for Vim. To make
things easier on ourselves we can just alias the vim
command so that vi
runs instead:
echo "alias vim='vi'" >> ~/.bashrc
source ~/.bashrc
OPTION 2 - INSTALL VIM
The other option, and the option that many sysadmins would probably take is to install Vim if it isn’t installed already.
To install Vim on Ubuntu using the system package manager, run:
sudo apt install vim
Note: Since Ubuntu Server LTS is the recommended Linux distribution to use for the Linux Upskill Challenge, installing Vim for all of the other various Linux “distros” is outside of the scope of this lesson. The command above “should” work for most Debian-family Linux OS’s however, so if you’re running Mint, Debian, Pop!_OS, or one of the many other flavors of Ubuntu, give it a try. For Linux distros outside of the Debian-family a few simple web-searches will probably help you find how to install Vim using other Linux’s package managers.
THE TWO THINGS YOU NEED TO KNOW
- There are two “modes” - with very different behaviours
- Little or nothing onscreen lets you know which mode you’re currently in!
The two modes are “normal mode” and “insert mode”, and as a beginner, simply remember:
"Press Esc twice or more to return to normal mode"
The “normal mode” is used to input commands, and “insert mode” for writing text - similar to a regular text editor’s default behaviour.
INSTRUCTIONS
So, first grab a text file to edit. A copy of /etc/services
will do nicely:
cd
pwd
cp -v /etc/services testfile
vim testfile
At this point we have the file on screen, and we are in “normal mode”. Unlike nano
, however, there’s no onscreen menu and it’s not at all obvious how anything works!
Start by pressing Esc once or twice to ensure that we are in normal mode (remember this trick from above), then type :q!
and press Enter. This quits without saving any changes - a vital first skill when you don’t yet know what you’re doing!
Now let’s go in again and play around, seeing how powerful and dangerous vim
is - then again, quit without saving:
vim testfile
Use the keys h j k and l to move around (this is the traditional vi
method) then try using the arrow keys - if these work, then feel free to use them - but remember those hjkl keys because one day you may be on a system with just the traditional vi
and the arrow keys won’t work.
Now play around moving through the file. Then exit with Esc Esc :q!
as discussed earlier.
Now that you’ve mastered that, let’s get more advanced.
vim testfile
This time, move down a few lines into the file and press 3 then 3 again, then d and d again - and suddenly 33 lines of the file are deleted!
Why? Well, you are in normal mode and 33dd is a command that says “delete 33 lines”. Now, you’re still in normal mode, so press u - and you’ve magically undone the last change you made. Neat huh?
Now you know the three basic tricks for a newbie to vim
:
- Esc Esc always gets you back to “normal mode”
- From normal mode
:q!
will always quit without saving anything you’ve done, and - From normal mode
u
will undo the last action
So, here’s some useful, productive things to do:
- Finding things: From normal mode, type
G
to get to the bottom of the file, thengg
to get to the top. Let’s search for references to “sun”, type/sun
to find the first instance, hit enter, then press n repeatedly to step through all the next occurrences. Now go to the top of the file (gg remember) and try searching for “Apple” or “Microsoft”. - Cutting and pasting: Go back up to the top of the file (with gg) and look at the first few lines of comments (the ones with “#” as the first character). Play around with cutting some of these out, and pasting them back. To do this simply position the cursor on a line, then (for example), type 11dd to delete 11 lines, then immediately paste them back in by pressing P - and then move down the file a bit and paste the same 11 lines in there again with P
- Inserting text: Move anywhere in the file and press i to get into “insert mode” (it may show at the bottom of the screen) and start typing - and Esc Esc to get back into normal mode when you’re done.
- Writing your changes to disk: From normal mode type
:w
to “write” but stay invim
, or:wq
to “write and quit”.
This is as much as you ever need to learn about vim
- but there’s an enormous amount more you could learn if you had the time. Your next step should be to run vimtutor
and go through the “official” Vim tutorial. It typically takes around 30 minutes the first time through. To solidify your Vim skills make a habit of running through the vimtutor every day for 1-2 weeks and you should have a solid foundation with the basics.
Note: If you aliased vim to vi for the excercises above, now might be a good time to install vim since this is what provides the
vimtutor
command. Once you have Vim installed, you can run:help vimtutor
from inside of Vim to view the help as well as a few other tips/tricks.
However, if you’re serious about becoming a sysadmin, it’s important that you commit to using vim
(or vi
) for all of your editing from now on.
One last thing, you may see reference to is the Vi vs. Emacs debate. This is a long running rivalry for programmers, not system administrators - vi/vim
is what you need to learn.
WHY CAN’T I JUST STICK WITH NANO?
-
In many situations as a professional, you’ll be working on other people’s systems, and they’re often very paranoid about stability. You may not have the authority to just "sudo apt install " - even if technically you could.
-
However,
vi
is always installed on any Unix or Linux box from tiny IoT devices to supercomputer clusters. It is actually required by the Single Unix Specification and POSIX. -
And frankly it’s a shibboleth for Linux pros. As a newbie in an interview it’s fine to say you’re “only a beginner with vi/vim” - but very risky to say you hate it and can never remember how to exit.
So, it makes sense if you’re aiming to do Linux professionally, but if you’re just working on your own systems then by all means choose nano
or pico
etc.
EXTENSION
If you’re already familiar with vi
/ vim
then use today’s hour to research and test some customisation via your ~/.vimrc
file. The link below is specifically for sysadmins:
RESOURCES
- Here is why
vim
uses the hjkl keys as arrow keys - Graphical vi-vim Cheat Sheet and Tutorial
- Vi - Vim Tutorial (video)
- How to Copy, Cut and Paste in Vim / Vi
Some rights reserved. Check the license terms here
You’re about ~45 years to late for design feedback :/ Any change to that core mechanic would be a new text editor, which breaks the “learn vi because its everywhere” logic. It is already a bit annoying when you have learnt
vim
, and then you find an ancient box with justvi
, and half your commands and muscle memory dont work anymore.Vim
grew/evolved/learned fromed
, which was basically vim command/normal mode, but with no live preview of what your doing.The existing method of issuing commands, although relatively unintuitive, allows it to be extremely extensible/flexible.