以降の節では、次に示す、vi コマンドのさまざまな機能について説明します。
ファイル内の移動
テキストの挿入
テキストの変更と置換
テキストの変更の取り消し
テキストの削除
スペルのチェック
ファイル出力の書式の指定
コマンドの繰り返し
前節では、ファイルの作成、保存、印刷の方法と vi の終了方法を学習しました。ファイルが作成されたので、次にファイル内を移動するために必要な概念を理解しておく必要があります。練習用ファイルを開いて、この節で説明する各コマンドを実際に試してみてください。
vi の起動時には、カーソルは vi 画面の左上隅に表示されます。コマンドモードでは、複数のキーボードコマンドを使ってカーソルを移動できます。カーソルの移動には、特定の文字キー、矢印キー、Return キー、Back Space キー (または Delete キー)、Space Bar キーが使えます。
vi の大部分のコマンドでは大文字と小文字が区別されます。そのため、同じキーによるコマンドであっても、大文字と小文字とでは異なる結果となる場合があるので注意してください。
キーボードに矢印キーが付いている場合は、これらを使ってみてください。上下左右の矢印キーを使うと、画面内で自由自在にカーソルを移動できます。カーソルの移動ができるのは、すでに表示されているテキストまたは入力領域内に限られます。
リモート端末から vi を使う場合は、矢印キーが正しく動作しないことがあります。矢印キーの動作は、端末エミュレータによって異なります。矢印キーが正しく動作しない場合は、次のような方法でカーソルを移動します。
ワード単位で右にカーソルを移動する場合は、w (「word」を表す) を押します。(Solaris 2.5 and ... という文の場合、w を押すごとに S 2 . 5 a の順に移動します。)
ワード単位で左にカーソルを移動するには、b (「back」を表す) を押します。
いちばん近くにある区切り文字を通り越して右または左のワード (スペースで区切られているワード) の最初の文字にカーソルを移動するには、W または B を押します。(Solaris 2.5 and ... という文の場合、W を押すごとに S 2 a の順に移動します。
現在カーソルがあるワードの最後の文字にカーソルを移動するには、e (「end」を表す) を押します。
現在カーソルがある行の先頭に、カーソルを移動するには、^ を押します。
現在カーソルがある行の末尾に、カーソルを移動するには、$ を押します。
1 行下の、最初の (空白ではない) 文字にカーソルを移動するには、Return キーを押します。
1 文字分左にカーソルを移動するには、Back Space キーを押します。
1 文字分右にカーソルを移動するには、Space Bar キーを押します。
画面の先頭行にカーソルを移動するには、H (「high」を表す) を押します。
画面の中央行にカーソルを移動するには、M (「middle」を表す) を押します。
画面の先頭行にカーソルを移動するには、L (「low」を表す) を押します。
画面の最終行にカーソルがあるときに下に移動する場合、または画面の先頭行にカーソルがあるときに上に移動する場合は、テキストがスクロールアップまたはスクロールダウンされます。短いファイルの場合にはこのスクロールが効果的ですが、長いファイル内を移動する場合には少々手間がかかります。
ファイル内で 1 画面分または半画面分まとめて上方向や下方向にカーソルをページング、またはスクロールすることができます。これらのコマンドを paint というファイルで試すには、ファイルが十分長くなるようにテキストを追加します。
ページングとスクロールは基本的に異なります。テキストのスクロールでは、カーソルを一度に行単位で上下に移動しますが、ページングではカーソルを一度に画面単位で上下に移動します。高速のシステム上では、この違いに気付かないこともありますが、リモート端末から vi を使っている場合やシステムの実行速度が通常より遅い場合は、この違いがきわめて明白になります。
1 画面先 (下方向) にカーソルを移動するには、Ctrl-F を押します (Control キーを押しながら F キーを押します)。カーソルは、新しい画面の左上隅に移動します。
半画面先 (下方向) にスクロールするには、Ctrl-D を押します。
1 画面前 (上方向) にカーソルを移動するには、Ctrl-B を押します。
半画面先 (下方向) にスクロールするには、Ctrl-U を押します。
vi にはテキストを挿入するためのコマンドが多数あります。この節では、これらのコマンドのうち最も便利なものを紹介します。これらのコマンドが実行するモードは、入力モードです。これらのコマンドを使う場合、最初はコマンドモードでなければなりません。Esc キーを押してコマンドモードであることを確認してください。
カーソルの右側にテキストを追加するには、a (append) コマンドを使います。追加したい位置の左にカーソルを移動して a を押し、追加するテキストを続けて入力してみてください。入力が終わったら Esc キーを押します。
行の末尾にテキストを追加するには、A コマンドを使います。このコマンドの動作を確認するために、追加したい行にカーソルを移動して (その行内ならカーソルはどこにあってもよい)、A を押します。カーソルは行の末尾に移動し、その位置からテキストを続けて入力できます。入力が終わったら Esc キーを押します。
カーソルの左側にテキストを挿入するには、コマンドモードで i (insert) コマンドを使います。
行の先頭にテキストを挿入するには、I を押します。このコマンドを使うと、その行の任意の位置からカーソルが移動します。テキストを入力したあとにコマンドモードに戻るには、Esc キーを押します。
カーソルがある行の上または下に新規の行を挿入するには、次のコマンドを使います。
カーソルがある行の下に新規の行を挿入するには、o コマンドを使います。o を入力したあとにテキストを入力します。複数行にわたるようなテキストも入力することができます。入力が終わったら Esc キーを押します。
カーソルがある行の上に新規の行を挿入するには、O コマンド (大文字) 使います。
テキストの変更とは、テキストの一部分を別のテキストで置換することです。vi には状況に応じてテキストを変更するための方法が複数あります。(テキスト変更のコマンドを入力後、置換される部分を明らかにするために、 1 文字の場合はその文字が、テキストなどの場合はその最後の文字が、$ で表示されます。
ワード全体を置換するには、置換するワードの先頭にカーソルを移動し、cw と続けて入力してから新しいワードを入力します。入力が終わったら Esc キーを押します。
ワードの後半部分だけを変更するには、保存する部分の右側にカーソルを移動し、cw と続けて入力してから新しいテキストを入力します。入力が終わったら Esc キーを押します。ワードの前半部分だけを変更するには、保存する部分の先頭にカーソルを移動し、cb と続けて入力してから新しいテキストを入力します。入力が終わったら Esc キーを押します。
行全体を置換するには、変更したい行に移動して (その行内ならカーソルはどこにあってもよい)、cc と続けて入力します。すると、その行内の文字はすべて消えます (置換される部分を示す $ は表示されません)。新しいテキスト (長さは任意) の入力が終わったら Esc キーを押します。
カーソルがある文字を、1 つ以上の文字からなるテキストに置換するには、s を押してから新しいテキストを入力します。コマンドモードに戻るには、Esc キーを押します。
カーソルがある文字を、別の 1 文字に置換するには、r コマンドを使います。置換する文字の上にカーソルを移動し、r を押してから 1 文字だけ入力します。この置換が終了すると、vi は自動的にコマンドモードに戻ります (Esc キーを押す必要はありません)。
vi でテキストを編集してファイルを変更するときは、誤った入力を取り消したいと思う場合が必ずあります。vi の u (「undo」を表す) コマンドを使うと、直前の操作を取り消した状態から編集作業を再開できます。
vi で入力を誤ったり、特定の操作を実行したあとで気が変わった場合は、コマンドを実行した直後に u を押すことによってそのコマンドを取り消しできます (u を押したあとで Esc キーを押す必要はありません)。もう一度 u を押すと、u コマンド自身が取り消されます。
特定の行に対する変更をすべて取り消すには、U コマンドを使います。このコマンドは、その行からカーソルを移動していない場合にだけ有効です (U を押したあとで Esc キーを押す必要はありません)。
vi の削除コマンドを使って、指定した文字、ワード、行の削除ができます。削除後は、vi はコマンドモードのままなので、入力モードにするためのコマンドを入力してからテキストを挿入してください。
1 文字を削除するには、削除する文字の上にカーソルを移動して x を押します。
x コマンドは、その文字自身と、その文字が占めていたスペースも削除します。つまり、ワードの真ん中から 1 文字を削除すると、その 1 文字分のスペースも削除されて残りの文字が詰められます。x コマンドを使って行内の空白 (つまりその空白自身と、その空白が占めていたスペース) を削除することもできます。
カーソルの前方 (左側) の文字を 1 文字削除する場合は、大文字の X を押します。
ワードを 1 つ削除するには、削除するワードの先頭にカーソルを移動して dw と続けて入力します。ワードとそれが占めていたスペースが削除されます。
ワードの一部分だけを削除するには、保存する (削除せずにそのままにしておく) 部分の右にカーソルを移動して dw と続けて入力します。ワードの残りの部分とそれが占めていたスペースが削除されます。
行を削除するには、削除したい行に移動して (その行内ならカーソルはどこにあってもよい)、dd と続けて押します。その行と、その行が占めていたスペースが削除されます。
大部分の文書処理プログラムと同様に、vi エディタでも、テキスト行の「コピー&ペースト」と「カット&ペースト」ができます。vi で「コピー&ペースト」を行う場合は、yank と put コマンドを使います。また、「カット&ペースト」の場合は、delete と put を使います。
vi で比較的短いテキストブロックのコピーや移動を行う場合は、 yank、delete、put の各コマンドを組み合わせて使います。
行をコピーするには、「yank」を表す yy (または Y) と、「put below」を表す p (または「put above」を表す P) という 2 つのコマンドが必要です。Y と yy は同じ働きをします。
1 行をバッファに取り込む (yank) には、次の手順を実行します。
取り込みたい行の任意の位置にカーソルを移動させます。
yy と入力します。
取り込んだ行を挿入 (コピー) する位置の上の行に移動します。
p と入力します。
その取り込んだ行が p と押した行の下に表示されます。
取り込んだ行をカーソルがある行の上にコピーするには、P (大文字) を押します。
yy コマンドでは行数を指定できます。たとえば、バッファに 11 行を取り込むには、11yy と続けて入力します。すると、カーソルがある行から下方向に数えて 11 行目までがバッファに取り込まれ、画面の最終行にその旨を示すメッセージ 「11 行をバッファにコピーしました」が表示されます。
先に説明した任意の削除コマンドの直後に p または P コマンドを使うと、削除したテキストをカーソルがある行の下の行または上の行に挿入できます。
コピーや移動 (yank、delete、put) の操作中は、カーソルの移動コマンドだけを使ってください。テキストを新しい位置に挿入する前にほかのテキストをコピーしたり移動したりすると、先にコピーや移動のためにバッファに取り込んだ内容が失われてしまいます。
行の移動についても、dd (「delete」を表す) と、p (または P) という 2 つのコマンドが必要です。
行を移動するには、まずその移動したい行に移動して (その行内ならカーソルはどこにあってもよい)、dd と続けて入力します。たとえば、その行とその行から数えて 5 行目までの 5 行分を移動の対象行としたい場合は、その行で 5dd と続けて入力します。このコマンドによって、移動の対象行が削除されます。
次に、その削除した行を挿入する位置の上の行に、カーソルを移動して p を押します。その行がカーソルのあった行の下に挿入されます。
また、その削除した行をカーソルのある行の上に挿入するには、P を押します。
ほとんどの vi のコマンドの前には、カウントと呼ばれるリピートファクタ (コマンドの前に付ける数値で、その操作を何回繰り返すかを指示する) を指定できます。
これまでの節で説明した大部分のコマンドに、カウントを指定できます。たとえば、3dd は行を削除する操作を 3 回繰り返します (したがって、カーソルがあった行も含めて 3 行が削除されます)。2dw はカーソルがあった位置のワードも含めて 2 つのワードを削除し、4x はカーソルがあった位置も含めて 4 つの文字または空白を削除します。またカウントを移動コマンドの前に付ければ、3w や 2Ctrl-F (2 を押してから、Ctrl-F を押す) のように入力してカーソルを移動できます。
ピリオド (.) を押すと、前回実行したテキスト編集コマンドが繰り返されます。たとえば、dd を使ってある行を削除した場合は、カーソルを別の行に移動してピリオドを押せば、その別の行を削除できます。