vi - Linux


vi, short for Visual Interface, is one of the oldest and most common text editors in the Unix/Linux world. It is designed for creating and modifying text files directly within the command line interface. Known for its power and flexibility, vi is particularly useful for software developers, system administrators, and power users who need to edit scripts, configure files, or code in various programming languages. It operates in various modes, primarily normal, insert, and command-line, each facilitating different kinds of tasks.


The basic command to start vi is as follows:

vi [options] [file...]
  • [file…]: This is an optional argument where one or more filenames can be provided. If a file does not exist, vi will start with an empty buffer; otherwise, the existing file will be loaded.


  • -R: Opens the file in read-only mode. Any attempts to write to the file will be denied.
  • -v: Starts vi in verbose mode.
  • +command: Executes the given command after the first file is read.


  1. Opening a File:

    vi myfile.txt

    This command opens myfile.txt in vi, ready for editing.

  2. Read-Only Mode:

    vi -R config.conf

    Opens config.conf in read-only mode to prevent accidental modifications.

  3. Jump to End of File on Open:

    vi +$ largefile.log

    This opens largefile.log and jumps to the end of the file.

Common Issues

  • Modal Confusion: New users often struggle with the modal nature of vi. Remember, pressing Esc returns you to Normal mode, where you can execute commands.
  • Accidental Overwriting: To prevent accidental changes, open files in read-only mode with the -R flag.
  • Exiting: To exit without saving, use :q!. To save changes and exit, use :wq or ZZ.


vi can easily be integrated into shell scripts or combined with other commands. For example, to edit all .txt files in a directory, you could use:

for file in *.txt; do vi "$file"; done
  • vim: An enhanced version of vi with additional features like syntax highlighting, multi-level undo, and a comprehensive help system.
  • nano: Another popular, easy-to-use command-line text editor which is often recommended for beginners.
  • emacs: A very powerful, extensible text editor capable of running as a full-fledged development environment.

For more advanced features and customizations, refer to the vim documentation or the extensive online tutorials available for vi and its derivatives.