LFCS #2: How to Install and Use Vi/Vim as a Full Text Editor in Linux

A couple of months ago, the Linux Foundation launched the LFCS (Linux Foundation Certified Sysadmin) certification in order to help individuals from all over the world to verify they are capable of doing basic to intermediate system administration tasks on Linux systems.

The Linux administration tasks involve first-hand troubleshooting and maintenance, plus intelligent decision-making to know when it’s time to raise issues to upper support teams.

The series will be titled Preparation for the LFCS (Linux Foundation Certified Sysadmin) Parts 1 through 33 and cover the following topics:

No. Title
Part 1 How to Use ‘Sed’ Command to Manipulate Files in Linux
Part 2 How to Install and Use Vi/Vim in Linux
Part 3 How to Compress Files & Directoires and Finding Files in Linux
Part 4 Partitioning Storage Devices, Formatting Filesystems, and Configuring Swap Partition
Part 5 Mount/Unmount Local and Network (Samba & NFS) Filesystems in Linux
Part 6 Assembling Partitions as RAID Devices – Creating & Managing System Backups
Part 7 Managing System Startup Processes and Services (SysVinit, Systemd, and Upstart
Part 8 How to Manage User & Groups, File Permissions, and Sudo Access
Part 9 Linux Package Management with Yum, RPM, Apt, Dpkg, Aptitude, and Zypper
Part 10 Learning Basic Shell Scripting and Filesystem Troubleshooting
Part 11 How to Manage and Create LVM Using vgcreate, lvcreate, and lvextend Commands
Part 12 How to Explore Linux with Installed Help Documentations and Tools
Part 13 How to Configure and Troubleshoot Grand Unified Bootloader (GRUB)
Part 14 Monitor Linux Processes Resource Usage and Set Process Limits on a Per-User Basis
Part 15 How to Set or Modify Kernel Runtime Parameters in Linux Systems
Part 16 Implementing Mandatory Access Control with SELinux or AppArmor in Linux
Part 17 How to Set Access Control Lists (ACLs) and Disk Quotas for Users and Groups
Part 18 Installing Network Services and Configuring Automatic Startup at Boot
Part 19 An Ultimate Guide to Setting Up FTP Server to Allow Anonymous Logins
Part 20 Setup a Basic Recursive Caching DNS Server and Configure Zones for Domain
Part 21 How to Install, Secure, and Performance Tuning of MariaDB Database Server
Part 22 How to Install and Configure NFS Server for File System Sharing
Part 23 How to Setup Apache with Name-Based Virtual Hosting with SSL Certificate
Part 24 How To Setup an Iptables Firewall to Enable Remote Access to Services in Linux
Part 25 How to Turn a Linux into a Router to Handle Traffic Statically and Dynamically
Part 26 How to Setup Encrypted Filesystems and Swap Using Cryptsetup Tool
Part 27 How to Monitor System Usage, Outages, and Troubleshoot Linux Servers
Part 28 How to Setup a Network Repository to Install or Update Packages
Part 29 How to Audit Network Performance, Security, and Troubleshooting
Part 30 How to Install and Manage Virtual Machines and Containers
Part 31 Learn the Basics of Git to Manage Projects Efficiently
Part 32 A Beginner’s Guide to Configuring IPv4 and IPv6 Addresses in Linux
Part 33 A Beginner’s Guide to Creating Network Bonding and Bridging in Ubuntu

This post is Part 2 of a 33-tutorial series, here in this part, we will cover the basic file editing operations and understanding modes in Vi/Vim editor, that are required for the LFCS certification exam.

Perform Basic File Editing Operations in Vi Editor

Vi was the first full-screen text editor written for Unix. Although it was intended to be small and simple, it can be a bit challenging for people used exclusively to GUI text editors, such as NotePad++, or gedit, to name a few examples.

To use Vi, we must first understand the 3 modes in which this powerful program operates, in order to begin learning later about its powerful text-editing procedures.

Please note that most modern Linux distributions ship with a variant of vi known as vim (“Vi improved”), which supports more features than the original vi does. For that reason, throughout this tutorial, we will use vi and vim interchangeably.

If your distribution does not have Vim installed, you can install it as follows.

$ sudo apt install vim         [On Debian, Ubuntu and Mint]
$ sudo yum install vim         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
$ sudo emerge -a sys-apps/vim  [On Gentoo Linux]
$ sudo apk add vim             [On Alpine Linux]
$ sudo pacman -S vim           [On Arch Linux]
$ sudo zypper install vim      [On OpenSUSE]    

Why Should I Want to Learn Vi?

There are at least 2 good reasons to learn vi editor.

  1. vi is always available (no matter what distribution you’re using) since it is required by POSIX.
  2. vi does not consume a considerable amount of system resources and allows us to perform any imaginable task without lifting our fingers from the keyboard.

In addition, vi has a very extensive built-in manual, which can be launched using the :help command right after the program is started. This built-in manual contains more information than vi/m’s man page.

Vim Editor Help
Vim Editor Help

Launching Vi Editor

To launch vi, type vi in your command prompt.

# vi
Start Vi Editor
Start Vi Editor

Then press i to enter Insert mode, and you can start typing.

Another way to launch vi/m is.

# vi filename

This will open a new buffer (more on buffers later) named filename, which you can later save to disk.

Understanding Vi Modes

Vi editor has multiple modes, each serving a distinct purpose and allowing users to perform specific actions.

Here are the main modes you should be aware of:

Vi Command-Line Mode

In command mode, vi allows the user to navigate around the file and enter vi commands, which are brief, case-sensitive combinations of one or more letters. Almost all of them can be prefixed with a number to repeat the command that number of times.

For example, yy (or Y) copies the entire current line, whereas 3yy (or 3Y) copies the entire current line along with the two next lines (3 lines in total).

We can always enter command mode (regardless of the mode we’re working on) by pressing the Esc key. The fact that in command mode the keyboard keys are interpreted as commands instead of text tends to be confusing to beginners.

Vi Ex Mode

In ex mode, we can manipulate files (including saving a current file and running outside programs). To enter this mode, we must type a colon (:) from command mode, directly followed by the name of the ex-mode command that needs to be used. After that, vi returns automatically to command mode.

Vi Insert Mode

In insert mode (the letter i is commonly used to enter this mode), we simply enter text. Most keystrokes result in text appearing on the screen (one important exception is the Esc key, which exits insert mode and returns to command mode).

Vi Insert Mode
Vi Insert Mode

Vi Commands Usage

The following table shows a list of commonly used vi commands. File edition commands can be enforced by appending the exclamation sign to the command (for example, :q! enforces quitting without saving).

 Key Command  Description
 h or left arrow  Go one character to the left
 j or down arrow  Go down one line
 k or up arrow  Go up one line
 l (lowercase L) or right arrow  Go one character to the right
 H  Go to the top of the screen
 L  Go to the bottom of the screen
 G  Go to the end of the file
 w  Move one word to the right
 b  Move one word to the left
 0 (zero)  Go to the beginning of the current line
 ^  Go to the first nonblank character on the current line
 $  Go to the end of the current line
 Ctrl-B  Go back one screen
 Ctrl-F  Go forward one screen
 i  Insert at the current cursor position
 I (uppercase i)  Insert at the beginning of the current line
 J (uppercase j)  Join the current line with the next one (move next lineup)
 a  Append after the current cursor position
 o (lowercase O)  Creates a blank line after the current line
 O (uppercase o)  Creates a blank line before the current line
 r  Replace the character at the current cursor position
 R  Overwrite at the current cursor position
 x  Delete the character at the current cursor position
 X  Delete the character immediately before (to the left) of the current cursor position
 dd  Cut (for later pasting) the entire current line
 D  Cut from the current cursor position to the end of the line (this command is equivalent to d$)
 yX  Give a movement command X, copy (yank) the appropriate number of characters, words, or lines from the current cursor position
 yy or Y  Yank (copy) the entire current line
 p  Paste after (next line) the current cursor position
 P  Paste before (previous line) the current cursor position
 . (period)  Repeat the last command
 u  Undo the last command
 U  Undo the last command in the last line. This will work as long as the cursor is still on the line.
 n  Find the next match in a search
 N  Find the previous match in a search
 :n  Next file; when multiple files are specified for editing, this command loads the next file.
 :e file  Load the file in place of the current file.
 :r file  Insert the contents of the file after (next line) the current cursor position
 :q  Quit without saving changes.
 :w file  Write the current buffer to a file. To append to an existing file, use :w >> file.
 :wq  Write the contents of the current file and quit. Equivalent to x! and ZZ
 :r! command  Execute the command and insert the output after (next line) the current cursor position.

Vi Options

The following options can come in handy while running vim (we need to add them in our ~/.vimrc file).

# echo set number >> ~/.vimrc
# echo syntax on >> ~/.vimrc
# echo set tabstop=4 >> ~/.vimrc
# echo set autoindent >> ~/.vimrc
vi Editor Options
vi Editor Options
  • set number shows line numbers when vi opens an existing or a new file.
  • syntax on turns on syntax highlighting (for multiple file extensions) in order to make code and config files more readable.
  • set tabstop=4 sets the tab size to 4 spaces (default value is 8).
  • set autoindent carries over the previous indent to the next line.

Search and Replace Text in Vi

vi has the ability to move the cursor to a certain location (on a single line or over an entire file) based on searches. It can also perform text replacements with or without confirmation from the user.

Searching Within a Line

The f command searches a line and moves the cursor to the next occurrence of a specified character in the current line.

For example, the command fh would move the cursor to the next instance of the letter h within the current line. Note that neither the letter f nor the character you’re searching for will appear anywhere on your screen, but the character will be highlighted after you press Enter.

For example, this is what I get after pressing f4 in command mode.

Search String in Vi
Search String in Vi

Searching an Entire File

Use the / command, followed by the word or phrase to be searched for. A search may be repeated using the previous search string with the n command, or the next one (using the N command). This is the result of typing /Jane in command mode.

Vi Search String in File
Vi Search String in File

Search and Replace Text

Vi uses a command (similar to sed’s) to perform substitution operations over a range of lines or an entire file.

To change the word “old” to “young” for the entire file, we must enter the following command.

 :%s/old/young/g 

Notice: The colon at the beginning of the command.

Vi Search and Replace
Vi Search and Replace

The colon (:) starts the ex command, s in this case (for substitution), % is a shortcut meaning from the first line to the last line (the range can also be specified as n,m which means “from line n to line m”), old is the search pattern, while young is the replacement text, and g indicates that the substitution should be performed on every occurrence of the search string in the file.

Alternatively, a c can be added to the end of the command to ask for confirmation before performing any substitution.

:%s/old/young/gc

Before replacing the original text with the new one, vi/m will present us with the following message.

Replace String in Vi
Replace String in Vi
  • y: perform the substitution (yes)
  • n: skip this occurrence and go to the next one (no)
  • a: perform the substitution in this and all subsequent instances of the pattern.
  • q or Esc: quit substituting.
  • l (lowercase L): perform this substitution and quit (last).
  • Ctrl-e, Ctrl-y: Scroll down and up, respectively, to view the context of the proposed substitution.

Editing Multiple Files in Vi

Let’s type vim file1 file2 file3 in our command prompt.

# vim file1 file2 file3

First, vim will open file1. To switch to the next file (file2), we need to use the :n command. When we want to return to the previous file, :N will do the job.

In order to switch from file1 to file3.

a). The :buffers command will show a list of the file currently being edited.

:buffers
Edit Multiple Files
Edit Multiple Files

b). The command :buffer 3 (without the s at the end) will open file3 for editing.

In the image above, a pound sign (#) indicates that the file is currently open but in the background, while %a marks the file that is currently being edited.

On the other hand, a blank space after the file number (3 in the above example) indicates that the file has not yet been opened.

Temporary Vi Buffers

To copy a couple of consecutive lines (let’s say 4, for example) into a temporary buffer named a (not associated with a file) and place those lines in another part of the file later in the current vi section, we need to…

  • Press the ESC key to be sure we are in vi Command mode.
  • Place the cursor on the first line of the text we wish to copy.
  • Type “a4yy” to copy the current line, along with the 3 subsequent lines, into a buffer named a. We can continue editing our file – we do not need to insert the copied lines immediately.
  • When we reach the location for the copied lines, use “a before the p or P commands to insert the lines copied into the buffer named a:
    1. Type “ap to insert the lines copied into the buffer after the current line on which the cursor is resting.
    2. Type “aP to insert the lines copied into buffer a before the current line.

If we wish, we can repeat the above steps to insert the contents of the buffer in multiple places in our file. A temporary buffer, such as the one in this section, is disposed of when the current window is closed.

Summary

As we have seen, vi/m is a powerful and versatile text editor for CLI. Feel free to share your own tricks and comments below.

Update: If you want to extend your VI editor skills, then I would suggest you read the following two guides that will guide you to some useful VI editor tricks and tips.

The LFCS eBook is available now for purchase. Order your copy today and start your journey to becoming a certified Linux system administrator!

Product Name Price Buy
The Linux Foundation’s LFCS Certification Preparation Guide $19.99 [Buy Now]

Last, but not least, please consider buying your exam voucher using the following links to earn us a small commission, which will help us keep this book updated.

Hey TecMint readers,

Exciting news! Every month, our top blog commenters will have the chance to win fantastic rewards, like free Linux eBooks such as RHCE, RHCSA, LFCS, Learn Linux, and Awk, each worth $20!

Learn more about the contest and stand a chance to win by sharing your thoughts below!

Gabriel Cánepa
Gabriel Cánepa is a GNU/Linux sysadmin and web developer from Villa Mercedes, San Luis, Argentina. He works for a worldwide leading consumer product company and takes great pleasure in using FOSS tools to increase productivity in all areas of his daily work.

Each tutorial at TecMint is created by a team of experienced Linux system administrators so that it meets our high-quality standards.

Join the TecMint Weekly Newsletter (More Than 156,129 Linux Enthusiasts Have Subscribed)
Was this article helpful? Please add a comment or buy me a coffee to show your appreciation.

17 Comments

Leave a Reply
  1. Thank you, and now I know, I can change ens33 for eth0 when I install asterisk on centos 7 because sometimes I need to change ens33 for eth0 if not some modules doesn’t work.

    Reply
  2. One fun workaround with vim that I use sometimes is that if you’ve forgotten that you can’t write to the file you’re editing unless you’re root, you can use the command “:w !sudo tee %” to execute the write with sudo permissions.

    This only works if you’re in the sudo group on the machine, but it’s helped me several times when I’ve edited system files and forgotten to open the file with sudo or as root.

    Reply
  3. What a wonderful and helpful page for LFCS. I’m taking the LFCS in about three days and despite all the discouraging post online about this certification, I will still take my chances. I think your tutorial is the best yet to prepare for this exam.

    Reply
  4. really tnx for your great website and this awesome article about vi/m
    kindly tell me how can i gain this article part 1 ?
    it is clear from the subject of this document that is part 2 and i want part 1 , plz send me url of part 1
    tnx

    Reply
    • @Thomas,
      You can use whatever text editor you feel most comfortable with. In this series we choose vi/m because vi is present out-of-the-box on all distros and tends to be the tool of choice for most people. That being said, feel free to use whatever editor you want during the exam, as long as you find it installed on the virtual machine that they give you, but nano should be installed as well by default.

      Reply
  5. In the Command mode type “a4yy”
    It will immediately enter Insert mode, right?
    Because a – Append after the current cursor position

    Thanks

    Reply
    • @lvin,
      It should. Did you try it yourself in practice? Please post back if the behavior is not as expected.

      Reply
      • Hi Gabriel! Thank you for this great series of articles for the LFCS! I think what @lvin may be getting at here is that one cannot yank four lines into register “a” (I’ll also highlight that a few of the steps above refer to this as a “buffer”, which is slightly inaccurate terminology) as outlined above, or really any character that has a special function within vi/vim, since said key is going to go enter “insert” mode. Rather, something like “04yy” and/or “0p” to illustrate use of register “0” might be a better example, although feel free to let me know if I’m missing something. In any case, thanks again for the great write-up, Gabriel!

        Reply
        • You both appear to have misunderstood what he wrote.

          What to type when yanking four lines to a register is a quote mark, a letter a, a numeral 4, and two letters y. Like this: “a4yy

          The author was not surrounding a4yy with quotes.

          Reply
          • Thank you @lvin and @Barry for pointing this out, and mdebusk for clarifying.
            @Ravi, please correct the writeup as suggested by mdebusk above.

          • @Ivin, @Barry and @Mdebusk,

            Corrected as suggested in the writeup, I hope it will clear any confusion..

  6. Hi,
    I use Xubuntu 14.04 (which IS an Ubuntu derivative), but “aptitude” does not work here
    I installed vim using:
    “sudo apt-get update && sudo apt-get install vim”

    Reply
    • @Gabor,
      That indicates that aptitude is not present on your system.
      If you want to use it, you can install it as follows:

      sudo apt-get install aptitude

      and then start enjoying the bounties of one of the most powerful package management systems out there ;).

      Reply

Got Something to Say? Join the Discussion...

Thank you for taking the time to share your thoughts with us. We appreciate your decision to leave a comment and value your contribution to the discussion. It's important to note that we moderate all comments in accordance with our comment policy to ensure a respectful and constructive conversation.

Rest assured that your email address will remain private and will not be published or shared with anyone. We prioritize the privacy and security of our users.