pantz.org banner
Vi Command Reference
Posted on 04-14-2004 16:49:00 UTC | Updated on 04-14-2004 16:49:00 UTC
Section: /software/vi/ | Permanent Link

Here is a listing of commands for the Vi editor seperated out into sections.

VI Reference

Modes of Operation
Entering and Leaving vi Files
Basic Cursor Movement
Inserting Text
Deleting, Retrieving, and Undoing
Changing, Replacing,and Copying Text
Moving Around in a File
File Manipulation
Searching For Text
Setting Options
Common Option Settings

Modes of Operation

vi, the Unix visual editor, has two modes of operation:

  1. Command mode--This is vi's initial and normal state. In this mode, most commands you type are not displayed. Only commands preceded by :, /, or ! are displayed on the status line, which also gives feedback about input, output, and large changes. Execute these commands with <Return> or <Esc>. Use <Esc> to change from text input mode to command mode (when in doubt, press <Esc>).

  2. Text input (Insert) mode--This mode is entered by pressing a, A, i, I, o, or O. Press <Esc> to end text input mode and return to command mode.

For more information about using vi, see the online help note (on Uniform Access Unix computers, enter help vi).

The following notations are used in this document (variables appear in italics):

  x represents a single character
  <Control> x   control character: while holding down the <Control> key, press x
  text one or more characters
  n represents a number
  pat text and pattern matching characters
  <Return> Return key on your terminal
  <Esc> Escape key on your terminal
 
Entering and Leaving vi Files
  vi filename(s) edit a file or files
  vi -r filename retrieve saved version of file after system or editor crash
  vi -x filename edit encrypted file
  vi -wn   filename   set default window size to n (useful for dial-ups)
  :wq save (write) file and exit to system prompt
  ZZ save file and exit to system prompt
  :q! discard all changes and exit to system prompt
 
Basic Cursor Movement
Use h, j, k, and l to move the cursor--using arrow keys may result in undesirable consequences
  h move cursor left one character
  j move cursor down one line
  k move cursor up one line
  l move cursor right one character
(Any of the above commands preceded by n will move the cursor n spaces or lines in the indicated direction.)
 
Inserting Text
(If n precedes an insert character, n copies of inserted text are added upon escape from insertion mode.)
  a begin insert at right of cursor
  A begin insert at end of line
  i begin insert at left of cursor
  I insert at beginning of line
  o open line below, ready for insertion
  O open line above, ready for insertion
  S replace text with blank line; begin insertion at beginning of that line
  <Control>i insert tab
  <Control>v insert non-printing character
  <Backspace> erase character (invisible until over-typed or insert mode escaped)
  <Esc> terminate insert mode; also terminates unwanted commands
 
Deleting, Retrieving, and Undoing
  dw delete word
  dd delete line
  yw yank word into buffer
  yy yank line into buffer
  x delete character
  D delete characters from cursor to end of line
  ndw delete n words into buffer
  ndd delete n lines into buffer
  nyw yank n words into buffer
  nyy yank n lines into buffer
  nx delete n characters into buffer
  p put buffer contents after cursor
  P put buffer contents before cursor
  u undo last single change
  U restore current line
 
Changing, Replacing, and Copying Text
  . repeat last change
  n. repeat last change n times
  cwtext mark end of a word with $ and change to text (press <Esc> to end)
  rx replace character under cursor with character x
  nrx replace n characters with character x
  Rtext write over existing text, (<Esc> to end)
  J join succeeding line to current cursor line
  :s/pat1/pat2 on the current line, substitute the first occurence of pattern 1 with pattern 2
  :s/pat1/pat2/g on the current line, substitute all occurences of pattern 1 with pattern 2
  :& ;repeat the last :s request
  :%s/pat1/pat2/g substitute all occurences of pattern 1 with pattern 2 throughout the file
  :.,$s/pat1/pat2/g substitute all occurences of pattern 1 with pattern 2 from cursor to end of file
 
Moving Around in a File
  <Control>g ascertain line number of current line
  G go to end of file
  nG go to line n
  <Return> or + move cursor to beginning of next line
  - move to beginning of previous line
  w or nw move one word or n words to the right
  b or nb move one word or n words to the left
  ) move to next sentence
  ( move to previous sentence
  } move to next paragraph
  { move to previous paragraph
  <Control>d scroll down one-half screen
  <Control>u scroll up one-half screen
  <Control>l clear and redraw the screen
  mx mark cursor position with character x
  `x move to position marked with x
  d`x delete text from marked x to cursor
  y`x yank text from marked x to cursor
Note: If you precede the mark letter with ' (apostrophe) instead of ` (grave accent), the action will apply to the entire line the mark is in, not the exact marked location.
 
File Manipulation
  :rfile read in a file beginning on the line below the current line
  :w save and remain in current file
  :wq save file and quit
  :q quit (leave unedited file)
  :q! quit and do not save changes
  :!command run single Unix command while editing (press <Return> to return to file)
  :sh obtain temporary shell (<Control>D to return to file being edited)
  :n,mml move lines numbered n through m after line l
  :n,mtl make a copy of lines numbered n through m and put after line l
  :n,mwfile write lines numbered n through m to file
  :n,mw>>file append lines numbered n through m to end of file
  :'a,'bwfile write block, marked with a and b, to file
 
Searching For Text
  /pat go to pattern pat (forward in file from current cursor position)
  ?pat go to pattern pat (backward in file from current cursor position)
  n repeat last search, looking in direction of initial search
  N repeat last search, looking in reverse direction of initial search
  % find matching ( ) or { } or [ ] (can be used in combination with /,?,n, or N to search for matching brackets throughout file)
 
Setting Options
Options are either toggled on and off, or given values. When editing, set options for a file with the set command. If you want options to be permanent in a particular directory, create a .exrc file in that directory and set options in that file: set option option option=n. (For example, set ai sm sw=4.) If you want certain option settings to apply throughout your Unix environment, edit your .login file by entering setenv EXINIT'set option option option=n' (for example, setenv EXINIT'set ai sw wm=10').
The values in a .exrc file for a directory will override the values of EXINIT in the .login file. If no .exrc file exists, any option values set in the .login are used. If some option values are set in the .exrc file and others are set in the .login file, values from both files are used.
  :set all displays all option settings on your terminal
  :set displays settings set by EXINIT, the .exrc file, and any current changes
  :set option sets option
  :set option=n sets option and assigns it the value of n
  :set nooption unsets option
  :set number Turns line numbers on
  :set syntax on Turns on syntax highlighting
  :set option? displays setting of option on screen status line
 
Common Option Selections
(To see a complete list of options, enter :set all.)
  Option Name Default What Option Does
  autoindent (ai) noai provides automatic indentation during text entry
  autowrite (aw) noaw automatically saves file (write) before searches, control codes, escapes to shell
  ignorecase (ic) noic ignore case during searchs
  lisp nolisp modify )( }{ ][ to be compatible with lisp
  list nolist show tabs (^I) and ends of lines ($)
  magic magic allows metacharacters; with nomagic, these only include <Control> and $
  number (nu) nonu show line numbers
  readonly (ro) noro make file status read only
  redraw (re) nore simulate smart terminal on dumb
  shell sh=/bin/sh   pathname of new shell for ! and :sh (default from $SHELL if present)
  showmatch (sm) nosm show matching ( or { when ) or } is entered
  term $TERM name of terminal being used; set by Unix $TERM
  terse noterse provide shorter error diagnostics
  wrapmargin (wm)   wm=0 cause lines to be broken at least n spaces from right edge of screen

Reddit!

Related stories


RSS Feed RSS feed logo

About


3com

3ware

alsa

alsactl

alsamixer

amd

android

apache

areca

arm

ati

auditd

awk

badblocks

bash

bind

bios

bonnie

cable

carp

cat5

cdrom

cellphone

centos

chart

chrome

chromebook

cifs

cisco

cloudera

comcast

commands

comodo

compiz-fusion

corsair

cpufreq

cpufrequtils

cpuspeed

cron

crontab

crossover

cu

cups

cvs

database

dbus

dd

dd_rescue

ddclient

debian

decimal

dhclient

dhcp

diagnostic

diskexplorer

disks

dkim

dns

dos

dovecot

drac

dsniff

dvdauthor

e-mail

echo

editor

emerald

encryption

ethernet

expect

ext3

ext4

fat32

fedora

fetchmail

fiber

filesystems

firefox

firewall

flac

flexlm

floppy

flowtools

fonts

format

freebsd

ftp

gdm

gmail

gnome

google

gpg

greasemonkey

greylisting

growisofs

grub

hacking

hadoop

harddrive

hba

hex

hfsc

html

html5

http

https

hulu

idl

ie

ilo

intel

ios

iperf

ipmi

iptables

ipv6

irix

javascript

kde

kernel

kickstart

kmail

kprinter

krecord

kubuntu

kvm

lame

ldap

linux

logfile

lp

lpq

lpr

maradns

matlab

memory

mencoder

mhdd

mkinitrd

mkisofs

moinmoin

motherboard

mouse

movemail

mplayer

multitail

mutt

myodbc

mysql

mythtv

nagios

nameserver

netflix

netflow

nginx

nic

ntfs

ntp

nvidia

odbc

openbsd

openntpd

openoffice

openssh

openssl

openvpn

opteron

parted

partimage

patch

perl

pf

pfflowd

pfsync

photorec

php

pop3

pop3s

ports

postfix

power

procmail

proftpd

proxy

pulseaudio

putty

pxe

python

qemu

r-studio

raid

recovery

redhat

router

rpc

rsync

ruby

saltstack

samba

schedule

screen

scsi

seagate

seatools

sed

sendmail

sgi

shell

siw

smtp

snort

solaris

soundcard

sox

spam

spamd

spf

spotify

sql

sqlite

squid

srs

ssh

ssh.com

ssl

su

subnet

subversion

sudo

sun

supermicro

switches

symbols

syslinux

syslog

systemd

systemrescuecd

t1

tcpip

tcpwrappers

telnet

terminal

testdisk

tftp

thttpd

thunderbird

timezone

ting

tls

tools

tr

trac

tuning

tunnel

ubuntu

unbound

vi

vpn

wget

wiki

windows

windowsxp

wireless

wpa_supplicant

x

xauth

xfree86

xfs

xinearama

xmms

youtube

zdump

zeromq

zic

zlib