summaryrefslogtreecommitdiff
path: root/slackbook/html/vi-modes.html
blob: df838797630a09b8caa98f20b966ccd011bcfc8c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content="HTML Tidy, see www.w3.org" />
<title>Modes</title>
<meta name="GENERATOR" content="Modular DocBook HTML Stylesheet Version 1.7" />
<link rel="HOME" title="Slackware Linux Essentials" href="index.html" />
<link rel="UP" title="Vi" href="vi.html" />
<link rel="PREVIOUS" title="Vi" href="vi.html" />
<link rel="NEXT" title="Opening Files" href="vi-opening-files.html" />
<link rel="STYLESHEET" type="text/css" href="docbook.css" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body class="SECT1" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#840084"
alink="#0000FF">
<div class="NAVHEADER">
<table summary="Header navigation table" width="100%" border="0" cellpadding="0"
cellspacing="0">
<tr>
<th colspan="3" align="center">Slackware Linux Essentials</th>
</tr>

<tr>
<td width="10%" align="left" valign="bottom"><a href="vi.html"
accesskey="P">Prev</a></td>
<td width="80%" align="center" valign="bottom">Chapter 16 Vi</td>
<td width="10%" align="right" valign="bottom"><a href="vi-opening-files.html"
accesskey="N">Next</a></td>
</tr>
</table>

<hr align="LEFT" width="100%" />
</div>

<div class="SECT1">
<h1 class="SECT1"><a id="VI-MODES" name="VI-MODES">16.2 Modes</a></h1>

<p><tt class="COMMAND">vi</tt> operates in various modes, which are used to accomplish
various tasks. When you first start <tt class="COMMAND">vi</tt>, you are placed into
command mode. From this point, you can issue various commands to manipulate text, move
around in the file, save, quit, and change modes. Editing the text is done in insert
mode. You can quickly move between modes with a variety of keystrokes, which are
explained below.</p>

<div class="SECT2">
<h2 class="SECT2"><a id="VI-MODES-COMMAND-MODE" name="VI-MODES-COMMAND-MODE">16.2.1
Command Mode</a></h2>

<p>You are first placed into command mode. From this mode, you cannot directly enter text
or edit what is already there. However, you can manipulate the text, search, quit, save,
load new files, and more. This is intended only to be an introduction to the command
mode. For a description of the various commands, see <a href="vi-keys.html">Section
16.7</a>.</p>

<p>Probably the most often used command in command mode is changing to insert mode. This
is accomplished by hitting the <b class="KEYCAP">i</b> key. The cursor changes shapes,
and <span class="emphasis"><i class="EMPHASIS">-- INSERT --</i></span> is displayed at
the bottom of the screen (note that this does not happen in all clones of <tt
class="COMMAND">vi</tt>). From there, all your keystrokes are entered into the current
buffer and are displayed to the screen. To get back into command mode, hit the <b
class="KEYCAP">ESCAPE</b> key.</p>

<p>Command mode is also where you move around in the file. On some systems, you can use
the arrow keys to move around. On other systems, you may need to use the more traditional
keys of &#8220;<b class="KEYCAP">hjkl</b>&#8221;. Here is a simple listing of how these
keys are used to move around:</p>

<div class="INFORMALTABLE"><a id="AEN5604" name="AEN5604"></a>
<table border="0" frame="void" width="100%" class="CALSTABLE">
<col width="25%" />
<col width="75%" />
<tbody>
<tr>
<td><b class="KEYCAP">h</b></td>
<td>move left one character</td>
</tr>

<tr>
<td><b class="KEYCAP">j</b></td>
<td>move down one character</td>
</tr>

<tr>
<td><b class="KEYCAP">k</b></td>
<td>move up one character</td>
</tr>

<tr>
<td><b class="KEYCAP">l</b></td>
<td>move right one character</td>
</tr>
</tbody>
</table>
</div>

<p>Simply press a key to move. As you will see later, these keys can be combined with a
number to move much more efficiently.</p>

<p>Many of the commands that you will use in command mode begin with a colon. For
example, quitting is <b class="KEYCAP">:q</b>, as discussed earlier. The colon simply
indicates that it is a command, while the &#8220;<b class="KEYCAP">q</b>&#8221; tells <tt
class="COMMAND">vi</tt> to quit. Other commands are an optional number, followed by a
letter. These commands do not have a colon before them, and are generally used to
manipulate the text.</p>

<p>For example, deleting one line from a file is accomplished by hitting <b
class="KEYCAP">dd</b>. This will remove the line that the cursor is on. Issuing the
command <b class="KEYCAP">4dd</b> would tell <tt class="COMMAND">vi</tt> to remove the
line that the cursor is on and the three after that. In general, the number tells <tt
class="COMMAND">vi</tt> how many times to perform the command.</p>

<p>You can combine a number with the movement keys to move around several characters at a
time. For example, <b class="KEYCAP">10k</b> would move up ten lines on the screen.</p>

<p>Command mode can also be used to cut and paste, insert text, and read other files into
the current buffer. Copying text is accomplished with the <b class="KEYCAP">y</b> key (<b
class="KEYCAP">y</b> stands for yank). Copying the current line is done by typing <b
class="KEYCAP">yy</b>, and this can be prefixed with a number to yank more lines. Then,
move to the location for the copy and hit <b class="KEYCAP">p</b>. The text is pasted on
the line after the current one.</p>

<p>Cutting text is done by typing <b class="KEYCAP">dd</b>, and <b class="KEYCAP">p</b>
can be used to paste the cut text back into the file. Reading in text from another file
is a simple procedure. Just type <b class="KEYCAP">:r</b>, followed by a space and the
file name that contains the text to be inserted. The file's contents will be pasted into
the current buffer on the line after the cursor. More sophisticated <tt
class="COMMAND">vi</tt> clones even contain filename completion similar to the
shell's.</p>

<p>The final use that will be covered is searching. Command mode allows for simple
searching, as well as complicated search-and-replace commands that make use of a powerful
version of regular expressions. A complete discussion of regular expressions is beyond
the scope of this chapter, so this section will only cover simple means of searching.</p>

<p>A simple search is accomplished by hitting the <b class="KEYCAP">/</b> key, followed
by the text that you are searching for. <tt class="COMMAND">vi</tt> will search forward
from the cursor to the end of the file for a match, stopping when it finds one. Note that
inexact matches will cause <tt class="COMMAND">vi</tt> to stop as well. For example, a
search for &#8220;<span class="emphasis"><i class="EMPHASIS">the</i></span>&#8221; will
cause <tt class="COMMAND">vi</tt> to stop on &#8220;<span class="emphasis"><i
class="EMPHASIS">then</i></span>&#8221;, &#8220;<span class="emphasis"><i
class="EMPHASIS">therefore</i></span>&#8221;, and so on. This is because all of those
words do match &#8220;<span class="emphasis"><i
class="EMPHASIS">the</i></span>&#8221;.</p>

<p>After <tt class="COMMAND">vi</tt> has found the first match, you can continue on to
the next match simply by hitting the <b class="KEYCAP">/</b> key followed by enter. You
can also search backwards through the file by replacing the slash with the <b
class="KEYCAP">?</b> key. For example, searching backwards through the file for
&#8220;<span class="emphasis"><i class="EMPHASIS">the</i></span>&#8221; would be
accomplished by typing <b class="KEYCAP">?the</b>.</p>
</div>

<div class="SECT2">
<h2 class="SECT2"><a id="VI-MODES-INSET-MODE" name="VI-MODES-INSET-MODE">16.2.2 Insert
Mode</a></h2>

<p>Inserting and replacing text is accomplished in insert mode. As previously discussed,
you can get into insert mode by hitting <b class="KEYCAP">i</b> from command mode. Then,
all text that you type is entered into the current buffer. Hitting the <b
class="KEYCAP">ESCAPE</b> key takes you back into command mode.</p>

<p>Replacing text is accomplished in several ways. From command mode, hitting <b
class="KEYCAP">r</b> will allow you to replace the one character underneath the cursor.
Just type the new character and it will replace the one under the cursor. You will then
be immediately placed back into command mode. Hitting <b class="KEYCAP">R</b> allows you
to replace as many characters as you'd like. To get out of this replacement mode, just
hit <b class="KEYCAP">ESCAPE</b> to go back into command mode.</p>

<p>There is yet another way to toggle between insertion and replacement. Hitting the <b
class="KEYCAP">INSERT</b> key from command mode will take you into insert mode. Once you
are in insert mode, the keyboard's <b class="KEYCAP">INSERT</b> key serves as a toggle
between insert and replace. Hitting it once will allow you to replace. Hitting it once
more will once again allow you to insert text.</p>
</div>
</div>

<div class="NAVFOOTER">
<hr align="LEFT" width="100%" />
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td width="33%" align="left" valign="top"><a href="vi.html" accesskey="P">Prev</a></td>
<td width="34%" align="center" valign="top"><a href="index.html"
accesskey="H">Home</a></td>
<td width="33%" align="right" valign="top"><a href="vi-opening-files.html"
accesskey="N">Next</a></td>
</tr>

<tr>
<td width="33%" align="left" valign="top">Vi</td>
<td width="34%" align="center" valign="top"><a href="vi.html" accesskey="U">Up</a></td>
<td width="33%" align="right" valign="top">Opening Files</td>
</tr>
</table>
</div>
</body>
</html>