Day 6 - Editing with “vim”
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
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 Sysadmintm 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:
You should see output similar to the following if the
vi command is actually symlinked to
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 [email protected] Compiled by [email protected] ...
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
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
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.
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:
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.
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
- 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
uwill undo the last action
So, here’s some useful, productive things to do:
- Finding things: From normal mode, type
Gto get to the bottom of the file, then
ggto get to the top. Let’s search for references to “sun”, type
/sunto 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
:wto “write” but stay in
:wqto “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
vimtutorcommand. Once you have Vim installed, you can run
:help vimtutorfrom 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
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.
viis 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.
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
If you’re already familiar with
vim then use today’s hour to research and test some customisation via your
~/.vimrc file. The link below is specifically for sysadmins:
- Here is why
vimuses 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