vi - ディスプレイ指向の対話式テキスト・エディターを使用する

形式

vi [-BelRrsv] [+command] [-c command] [-t tag] [-w size] [-W option[option] ... [file ...]

表 1 は、このコマンドの説明を通じて使用されるシンボルをリストしています。
表 1. vi コマンド記述で使用されるシンボル
シンボル 摘要
Ctrl-L + 単一の文字 Ctrl キーとその文字キーを同時に押すことによって伝送される制御文字。
BACKSPACE 本当の Backspace キー。このキーは Ctrl-H キーとは異なる場合があります。
ENTER Enter キー。Return と表記されているキーボードもあります。
ESCAPE Escape キー。
INTERRUPT Break キー。通常は Ctrl-C です。
右矢印キー。
左矢印キー。
下矢印キー。
上矢印キー。

説明

vi は、画面エディター (vi) と行エディター (ex) の 2 つのコンポーネントで構成されています。 おのおの異なった一連のコマンドを持っています。画面エディターから行エディターを呼び出すことができ、また、行エディターの中で画面エディターを呼び出すこともできます。

スクリーン・エディターには、コマンド・モード または挿入モード があります。 コマンド・モードでは、入力されるすべての文字はただちにコマンドと解釈されます。挿入モードで は、入力されるすべての文字は編集されているテキストに追加されます。

ex モードでセッションを開始するのに 2 つの方法があります。
  • ex の名前でコマンドを呼び出す
  • vi の名前でコマンドを呼び出すが、-e オプションを指定する
同様に、vi モードでセッションを開始するのに 2 つの方法があります。
  • ex の名前でコマンドを呼び出すが、-v オプションを指定する
  • vi の名前で -e を指定しないでコマンドを呼び出す
vi および ex はテキスト・データが含まれるファイルを処理します。 ファイルにヌル文字 (.0 または ¥0) がある場合、それは値 0x7F に変換されます。 改行文字は、行の区切りと解釈されます。行の長さ は (改行も入れて) {LINE_MAX} バイト以内でなければなりません。それより長い行は、その長さに切り捨てられます。ファイルの最後の行に改行がなければ、改行が追加されます。以上の どの場合でも、vi はファイルが変更されたことをマークしメッセージを表示します。

vi は、rlogin コマンドまたは Telnet でシェルにログインした場合に使用可能です。 OMVS コマンドでログインしたときは、利用できません。

現在位置マーカー

現在位置マーカー は、テキストの編集中の (または編集済みの) 位置を示します。 ex モードでは、 現在位置ポインターは、現在編集されている行の行番号です。 vi モードでは、 このポインターは行番号とさらに行の中のカーソルの位置も示します。 現在位置ポインターで示される行は、常に画面上にあります。

vi 表示規約

vi は、画面の最下部の行に、検索コマンド (/ と ?)、ex コマンド (:)、および システム・コマンド (!) を表示します。エラーと通知メッセージもこの行に示されます。ファイルの最終行が画面の最終行より上であれば、ファイルの最終行を超える画面の行には、その 1 桁目に単一の ~ 文字が表示されます。あまり起きることではありませんが (起きるとすれば画面の幅より長い行がある場合です) 、vi が完全な行でディスプレイを埋められないことがあります。この場合、1 つまたは 複数の画面の行の第 1 列に単一の @ 文字が表示されます。以上の各行はファイル内容の一部ではありませんので無視してください。

オプション

+command
指定されたエディター command を実行することにより、編集セッションを開始します。複数のコマンドを指定するには、垂直バー (|) を使って分離してください。
-B
タグ付きファイルの自動変換を使用不可にします。filecodeset または pgmcodeset オプション (-W オプション) が指定されている場合、このオプションは無視されます。
-c command
テキストを画面に表示する前に command を実行します。 command は、ex コマンドのいずれかです。複数の ex コマンド を OR の縦棒 (|) で分離し、引用符で囲むことにより指定することができます。引用符は、シェルが | をパイプ文字と解釈しないようにします。例:
-c 'set all | ver'
-e
ex を起動します。
-i
LISP (リスト処理) モードを設定します。( および ) のコマンドは、コマンドのコンテキストとして、文章に対して機能するのではなく LISP コードのブロックに対して機能します。
-R
readonly 変数を設定します。これにより、ファイルが偶然上書きされてしまうことを防止します。 ファイルに書き込むコマンドにはどれも、! 接尾部が必要となります。
-r
システムまたはエディターが破損した後に、コマンド行に指定したすべてのファイルをリカバリーしようと試みます。ファイルの指定がないときは、vi はリカバリー可能なすべてのファイルのリストを表示します。

vi -r を使用して、自動変換で編集していたファイルをリカバリーする場合、データを元のタグ付きテキスト・ファイルに戻す際にも、自動変換が有効な状態でファイルをリカバリーする必要があります。同様に、ファイルの編集時に明示的変換が使用されていた場合 (-W filecodeset または -W pgmcodeset オプションを使用)、リカバリーしたデータを元のファイルに戻す際には同じオプションを指定する必要があります。これらを行わないと、リカバリーしたバージョンを保管する際に、コード化が正しくない文字データがファイルに書き込まれる可能性があります。

-s
抑制モード をオンにします。エディターはファイルの 通知メッセージを出力せず、ex がフィルターとして使用できるように します。ファイルが表示されないため、エディターは TERM 環境変数の値を 読み取りません。 このオプションは、また、ex が スタートアップ・ファイル (.exrc また は EXINIT で指定されたファイル) を読み取らないようにします。
-t tag
ex tag コマンドで行うのと同じ方法でタグを 探します。
エディターを vi モードにします。
-w size
オプション変数 windowsize に設定します。詳細は、vi オプションの設定を参照してください。
-W option[,option]...
z/OS 固有のオプションを指定します。オプションのキーワードは、大/小文字が区別されます。指定可能なオプションは、以下のとおりです。
filecodeset=codeset
ファイルの読み取り時に、あるコード・セットから別のコード・セットへのテキスト変換を実行します。ファイルのコード化文字セットは codeset です。codeset は、システムに認識されているコード・セット名かコード化数字セット ID (CCSID) のいずれかです。コマンド iconv -l は、既存の CCSID と対応するコード・セット名をリストします。どんなファイル・タグを含むファイルであっても、filecodeset および pgmcodeset オプションを使用できます。

pgmcodeset を指定したが filecodeset を省略した場合、ファイルが別のコード・セットでタグ付けされていても、ファイルのデフォルトのコード・セットは ISO8859-1 です。filecodesetpgmcodeset のいずれも指定しない場合、自動変換が有効であるか、_TEXT_CONV 環境変数にテキスト変換が指定されていない限り、テキスト変換は実行されません。 テキスト変換について詳しくは、z/OS UNIX シェル・コマンドのテキスト変換を制御するを参照してください。

filecodeset または pgmcodeset を指定した場合、このコマンドの呼び出しに対する自動変換は無効となり、-B オプションを指定しても無視されます。自動変換について詳しくは、「z/OS UNIX System Services 計画」を参照してください。

filecodeset の値を指定するときは、Unicode Service でサポートされる値を使用します。サポートされるコード・セットについて詳しくは、「z/OS Unicode Services User's Guide and Reference」を参照してください。

pgmcodeset=codeset
ファイルの読み取り時に、あるコード・セットから別のコード・セットへのテキスト変換を実行します。プログラム (コマンド) のコード化文字セットは codeset です。codeset は、システムに認識されているコード・セット名かコード化数字セット ID (CCSID) のいずれかです。コマンド iconv -l は、既存の CCSID と対応するコード・セット名をリストします。どんなファイル・タグを含むファイルであっても、filecodeset および pgmcodeset オプションを使用できます。

filecodeset が指定されているが pgmcodeset が省略されている場合、デフォルトのプログラム・コード・セットは IBM-1047 です。filecodesetpgmcodeset のいずれも指定しない場合、自動変換が有効であるか、_TEXT_CONV 環境変数にテキスト変換が指定されていない限り、テキスト変換は実行されません。 テキスト変換について詳しくは、z/OS UNIX シェル・コマンドのテキスト変換を制御するを参照してください。

filecodeset または pgmcodeset を指定した場合、このコマンドの呼び出しに対する自動変換は無効となり、-B オプションを指定しても無視されます。自動変換について詳しくは、「z/OS UNIX System Services 計画」を参照してください。

制約事項: pgmcodeset のサポートされる値は、IBM-1047 と 1047 のみです。

  1. vi エディターを使用して ASCII 文字が含まれるファイルを編集またはブラウズする場合、次のことを前提としています。
    • ファイルはタグ付けされておらず、タグ付けしたり自動変換を有効にする必要がない
    • タグを変更できない (タグ付けされていない public ファイルまたは読み取り専用ファイルをブラウズしているなど)
    次のように入力します。
    vi -W filecodeset=ISO8859-1,pgmcodeset=IBM-1047 myAsciiFile
  2. vi エディターを使用して EBCDIC 文字が含まれるファイルを編集またはブラウズする場合、自動変換が有効であるがファイルが UTF-8 として誤ってタグ付けされていることを前提としています。以下のコマンドを発行します。
    vi -B myMisTaggedFile

vi コマンドの要約

vi コマンドは、スクロール・コマンド、移動コマンド、 オブジェクト操作コマンド、テキスト挿入コマンド、およびその他のコマンドのカテゴリーに分類されます。

スクロール・コマンド

スクロール・コマンド は、画面のテキストの位置を調整します。 現在位置ポインターは、現在行のスクロールが画面から外れたとき のみ、変更されます。例えば、Ctrl-E は、画面を 1 行だけ上げて、テキストをスクロールします。カーソルは、テキストが画面の外に出ないかぎり、指していた同じテキストをそのまま指し続けます。スクロール・コマンドを参照してください。

vi のスクロール・コマンドと移動コマンドの前に 10 進数の整数を 置いて count の役目をさせることができます。例を挙げます。
[count] command
count は、コマンドが異なれば、異なった役割をします。もし count と入力しても、それは画面のどこにも表示されません。
Ctrl-B
テキストの 1 ページ分 (つまり 1 画面) から 2 行だけ戻るスクロールをします。カーソルは、画面の最終行に置かれます。count は、スクロールするページ数を指定し ます。count のデフォルト値は 1 です。
Ctrl-D
テキストを画面の最下部にスクロールします。現在位置ポインターは、テキストの同じ分量だけ 下方に移動します。すなわち、カーソルは画面上の同じ相対的位置にそのままあるということ です。count があれば、その数の行だけ画面は下方にスクロールします。この数はこの後のすべての Ctrl-D と Ctrl-U コマンドで使われます (新しい count が与えられるまで)。スクロール移動量のデフォルトは、画面の半分です。
Ctrl-E
新しい行を画面の最下部にスクロールします。現在位置ポインターは、現在行が画面のトップの 外にスクロールするまで変わりません。そうなったときは、ポインターはトップの行にセットされ ます。count が与えられると、その数の行だけ画面は下方スクロールをし ます。count のデフォルト値は 1 です。
Ctrl-F
テキストの 1 ページ分 (つまり 1 画面) から 2 行だけ下方にスクロールします。カーソルは、画面の最上部の行に置かれます。count は、スクロールするページ数を指定し ます。count のデフォルト値は 1 です。
Ctrl-U
テキストを画面の最上部にスクロールします。現在位置ポインターは、テキストの同じ分量だけ 上方に移動します。ということは、カーソルは画面上の同じ相対的位置にそのままあるということ です。count は、Ctrl-D の場合と同様に機能します。デフォルトのスクロール移動量は、画面の半分です。
Ctrl-Y
新しい行を画面の最上部にスクロールします。現在位置ポインターは、現在行が画面の最下部の外にスクロールするまで変わりません。そうなったときは、ポインターは最下部の行にセットされます。count が与えられると、その数の行だけ画面は上方にスクロールします。count のデフォルト値は 1 です。
[n] z [m] type
m 行のウィンドウに画面を再作成します。type は、現在行の位置を決めます。type が改行文字ならば、現在行はウィンドウのトップに置かれます。type がピリオド  (.) なら、現在行はウィンドウの真ん中に置かれます。type が負符号  (-) なら、現在行はウィンドウの最下部です。もし n が与えられると、まず現在位置ポインターが絶対行番号に設定され、それから画面が type に従って位置付けられます。n が省略されると、デフォルトは現在行です。m が省略されると、デフォルトは window です。(vi オプションの設定を参照。)

移動コマンド

移動コマンド は、ファイルの中でカーソルを移動します。 例えば、j 文字はカーソルを 1 行下に移動します。画面は必要なければスクロールしません。 移動コマンドには、絶対移動コマンドとコンテキスト依存コマンドの 2 種類があります。

絶対移動コマンド

絶対移動 コマンドは、周囲のテキストの性質に関係なくカーソルを移動させます。 例えば、j は常にカーソルを 1 行下に移動します。

m0^`、および ´ を除くすべての移動コマンドは、先頭に count を付けることで、その回数だけ移動を繰り返すことができます。
G
count で指定された絶対行番号に移動します。特別な場合で 、count がゼロか指定のない場合は、カーソルはファイルの最後の行に移動します。
h
カーソルの位置を 1 つだけ左方に移動します。
BACKSPACE
カーソルの位置を 1 つだけ左方に移動します。
← (左矢印)
カーソルの位置を 1 つだけ左方に移動します。
Ctrl-H
カーソルの位置を 1 つだけ左方に移動します。
↓ (下矢印)
画面の同じ列の次の行にカーソルを移動します。必要な場合、画面を 1 行スクロールします。
j
画面の同じ列の次の行にカーソルを移動します。必要な場合、画面を 1 行スクロールします。
Ctrl-J
画面の同じ列の次の行にカーソルを移動します。必要な場合、画面を 1 行スクロールします。
Ctrl-N
画面の同じ列の次の行にカーソルを移動します。必要な場合、画面を 1 行スクロールします。
k
画面の同じ列の前の行にカーソルを移動します。必要な場合、画面を 1 行上にスクロールします。
↑ (上矢印)
画面の同じ列の前の行にカーソルを移動します。必要な場合、画面を 1 行上にスクロールします。
Ctrl-P
画面の同じ列の前の行にカーソルを移動します。必要な場合、画面を 1 行上にスクロールします。
l
カーソルの位置を 1 つだけ右方に移動します。
→ (右矢印)
カーソルの位置を 1 つだけ右方に移動します。
SPACE
カーソルの位置を 1 つだけ右方に移動します。
m
現在位置ポインターをマーク名で記録します。マーク名 は、m の直後に置かれる単一の小文字です。例えば、ma コマンドは、現在位置ポインターの現在位置を a の名前で記録します。
0
(ゼロ) はカーソルを現在行の先頭文字に移動します。
+
次の行の最初の非ブランク文字にカーソルを移動します。必要な場合、画面を 1 行スクロールします。
Ctrl-M
次の行の最初の非ブランク文字にカーソルを移動します。必要な場合、画面を 1 行スクロールします。
-
前の行の最初の非ブランク文字にカーソルを移動します。必要な場合、画面を 1 行上にスクロールします。
|
count で指定された列番号にカーソルを移動します。これは画面の列番号で、文字オフセットではありません。2 バイト文字が列位置 5 と 6 にあれば、コマンド 6| は列 6 を含む文字に、カーソルを移動します。

もし count が現在行の長さよりも大きければ、vi はカーソルを その行の最後の文字に移動します。その指示された列がタブでスパンされていれば 、vi はカーソルをタブの後の最初の文字に移動します。

^
現在行の最初の非ブランク文字にカーソルを移動します。
$
カーソルの位置を行の終わりまで移動します。count は、下方移動する行の数 (現在行を含めて) を指定します。
`
マーク名が後に続いたときは、カーソルをその名前に関連付けられていた位置に移動します。 その位置は 、m コマンドで設定されています。この右プライム文字にもう 1 つの 右プライム文字が続くとカーソルは直前のコンテキストに移動します。直前のコンテキストとは、典型的には最後の変更個所です。より正確には直前のコンテキストとは、カーソルがコンテキストの前後と関係なく移動した所です。
´
カーソルがマークされた行の最初の非ブランク文字に設定されることを除いて 右プライム (`) 文字と同じです。

コンテキスト依存移動コマンド

コンテキスト依存 移動コマンドは、カーソルをテキストの性質に基づいて移動させます。 例えば、w はカーソルを次のワードの初めに移動します。したがって、このコマンドは、テキストを見て、次のワードがどこから始まるかを判別する必要があります。

viワード を以下のように定義します。
  • 英字、数字、および下線のシーケンスで、その両端が英字、数字、下線以外の 文字で区切られているもの、行の先頭または終了、あるいは編集バッファーの終了。
  • 英字、数字、下線、またはホワイト・スペース以外の文字のシーケンスで、その両端が英字、数字、下線、ホワイト・スペース、行の先頭または終了、あるいは 編集バッファーの終了で区切られているもの。
vi は、フルワード を 非ブランク文字のシーケンスでその両端がブランク文字 (スペース、タブ、改行) あるいは行またはファイルの先頭か終了で区切られているものと定義します。
B
現行フルワードの先頭文字にカーソルを移動します。もしカーソルがフルワードの初めにすでにあれば、vi はそれを前にある フルワードの先頭文字に移動します。
b
現行ワードの先頭文字にカーソルを移動します。もしカーソルがワードの初めにすでにあれば 、vi はそれを前にあるワードの先頭文字に移動します。
E
カーソルをフルワードの終わりまで移動します。カーソルがすでにワードの終わりにあるときに は、vi はそれを次のフルワードの最終文字に移動します。
e
カーソルをワードの終わりまで移動します。カーソルがすでにワードの終わりにあるときに は、vi はそれを次のワードの終わりの文字に移動します。
Fc
その行で逆方向に c という単一の文字を探してカーソルをその上に置き ます。count があるときには、エディターは count 番目のその文字を さかのぼって探します。
fc
その行で順方向に c という単一の文字を探してカーソルをその上に置き ます。count があるときには、エディターは count 番目のその文字を順方向に 探します。
H
カーソルを画面の一番上の行の最初の非ブランク文字に置きます。count は、画面のトップからの行数を指定します。
L
カーソルを画面の一番下の行の最初の非ブランク文字に置きます。count は、画面の最下部からの行数を指定します。
M
カーソルを画面の真ん中の行の最初の非ブランク文字に置きます。
N
直前の / または ? を反対方向に繰り返します。
n
直前の / または ? を繰り返します。
Tc
その行で逆方向に文字 c を探してカーソルをその求めた文字の後 ろに置きます。count は、求める文字の count 番目のものを 逆方向に探し、求めた文字の後ろにカーソルを置きます。
tc
その行で順方向に文字 c を探して カーソルをその前の文字に置きます。count は、求める文字の count 番目のものを探し、求めた文字の前の文字にカーソルを置きます。
W
次のフルワードの初めまで順方向に移動します。
w
次のワードの初めまで順方向に移動します。
(
直前の文の先頭まで戻します。文の境界は、ピリオド (.)、感嘆符 (!)、または疑問符 (?) です。この後に、任意の数の二重閉じ引用符 (")、単一閉じ引用符 (')、右小括弧 ())、右大括弧 (])、あるいは 2 つの スペース、行の終わりが続きます。段落やセクション境界もまた文の境界です。[[ および { を参照してください。

lisp オプションを指定している場合は、lisp s 式は、このコマンドの文であると解釈されます。

)
次の文の先頭まで順方向に移動します。文の定義については ( を 参照してください。

lisp オプションを指定している場合は、lisp s 式は、このコマンドの文であると解釈されます。

{
段落の先頭まで戻します。段落は、ブランク行やセクションの境界、または paragraphs 変数のテキスト・フォーマッター・マクロで始まります。
}
次の段落の先頭まで順方向に移動します。段落の定義については、{ を参照してください。
[[
セクションの先頭まで戻します。セクションは、用紙送り (Ctrl-L) で始まる行、左中括弧 { で始まる行、sections 変数のテキスト・フォーマッター・マクロ、またはファイルの先頭か終わりで開始します。

lisp オプションを指定した場合は、セクション境界は 先行 ( を持つ行によっても識別されます。

]]
次のセクションの先頭まで順方向に移動します。セクションの定義について は [[ を参照してください。

lisp オプションを指定した場合は、セクション境界は 先行 ( を持つ行によっても識別されます。

%
平衡化文字をカーソルの下に検出します。文字は、以下の文字の 1 つでなければなりません。
[{(< >)}].
;
直前の FfT、または t コマンドを繰り返します。
,
直前の FfT、または t コマンドを反対方向に繰り返します。
/regexp ,
正規表現 regexp に合致する行をファイルの中に順方向で探し、一致するストリングの先頭文字にカーソルを置きます。テキストの範囲を定義する演算子と共に 使用するときは、その範囲は現行カーソル位置の文字で始まり、一致するストリングの先頭文字で 終わります。regexp に続けて /+n または /-n を 付けることにより全部の行を指定することができます。ここで n は、合致した行からの オフセットです。
?regexp
/ と同様ですが、逆方向にファイルを検索します。
Ctrl-]
カーソルの後のワードをタグとして使用します。(タグについては ex を参照して ください。)

オブジェクト操作コマンド

オブジェクト操作コマンド は、すでにファイルにあるテキストを変更します。オブジェクト操作コマンド は、テキストのブロックに対して機能します。 コマンド文字のすぐ後に、移動コマンドが続きます。オブジェクト操作コマンドで操作されるオブジェクトは、現在位置ポインターから 移動コマンドがカーソルを置いた所までのテキストです。

例えば dL で、d はオブジェクトを削除する オブジェクト操作コマンドです。そのあとに移動コマンド L が続いて います。これは、画面の最下部への移動を意味しています。このコマンドで操作されるオブジェクトは、現在行から画面の最下部の行まで続きます。そしてこれらの行は削除されます。

通常、オブジェクトは移動コマンドのあとのカーソルの位置まで続きます (カーソルの位置そのものは 含みません)。しかし、 モードの移動もあります。例えば 、L は、カーソルを画面の最後の行の最初の非ブランク文字に置きます。もし それがオブジェクト操作コマンドで使用されると、それは開始行すべてと終了行すべてを含みます。また、カーソル位置を含むオブジェクトもあります。例えば、d$ は、ある 1 行の最後の位置まで、最後の文字を含めて削除します。$ そのものが、最後の文字にカーソルを置くものだからです。コマンド文字の繰り返しは、行ベースでの作業を意味します。つまり、5dd は 5 行削除します。

バッファーの使用

削除またはその他の操作が行われるオブジェクトについては、元の値がバッファー に入れられます。バッファーとは、テキストを収容できるコンピューター・メモリーの領域です。 これが行われる方法 は、いくつかあります。

  1. まず名前を付けたバッファーを使用することです。バッファーの名前は、1 字の小文字です。オブジェクトをバッファーに入れるには、次のように、 二重引用符 " を入力し、バッファーの名前を続け、さらにマニピュレーター・コマンドを続けます。
    "adL
    これは、現在行から画面の最下部までの行を削除し、バッファー a に削除されたテキストを追加します。通常、この種の操作は、現在のバッファー内容を上書きします。ただし、この形式を使用してバッファー名を大文字で指定した場合は、そのオブジェクトは、バッファーの現在の内容に追加されます。例えば、次のように指定します。
    
    "AdL
    は、現在行から画面の最下部までの行を削除し、バッファー a に 削除されたテキストを追加します。
  2. 何かを削除しているときに少なくとも 1 行以上の行全体を削除すると 、vi1 から 9 まで の番号の付いたバッファーを使用します。最初に 1 行以上が削除されると、そのテキストはバッファー 1 に置かれます。次回は、1 の 古い内容が 2 にコピーされ、新しく削除されたテキスト が 1 に入れられます。このようにして、削除されたテキストは 9 つの番号の付いたバッファーに波及していきます。テキストが、バッファー 9 からもさらに押し出されると、それは永久に消えてしまいます。
  3. これ以外の場合はすべて、操作されたオブジェクトは名前のないバッファーに入ります。例えば、1 行に満たないテキストを削除すれば、名前のないバッファーが使用されます。名前のないバッファーも他のバッファーと同じですが、ただ名前だけがありません。

バッファーの例

次の例は、バッファーの使用方法のいくつかを示しています。

  1. 現行カーソル位置から画面の最下部までのテキストを削除し、それをバッファー 1 に置くには (番号の付いたバッファーに順々に波及する)、以下のように入力してください。
    dL
  2. 現行カーソル位置からストリング fred まで (ただしそれを含みません) を削除し、それをバッファー a に入れるには、以下のように入力してください。
    "ad/fred/+0
  3. 現行のワードを削除し、名前のないバッファーに入れるには、以下のように入力してください。
    dw

オブジェクト操作コマンドのリスト

以下に、オブジェクト操作コマンドの一覧を示します。
c
オブジェクトを削除し、テキスト追加のため現行カーソル位置の後に挿入モードに 入ります。それが 1 行以下の変更であれば、ドル記号 ($) がオブジェクトの最後の文字に付けられ、そのドル記号 ($) に到達するまで現行の オブジェクトの上に入力されます。追加されたテキストは、既存のテキストがシフトして空きがつくられて、挿入されます。
d
オブジェクトを削除します。
y
オブジェクトを該当するバッファーに移動します。ソースは変更されません。これは、オブジェクトを複写、あるいはコピーするのに使用できます。
<
オブジェクトを左方に変数 shiftwidth の値だけシフトします。この演算子は、常に行で働きます。このコマンドは、新しい字下げの文字数に必要なだけ先行する ブランクとタブを置き換えます。count は、count 行シフトします。
>
オブジェクトを右方に変数 shiftwidth の値だけシフトします。この演算子は、常に行で働きます。このコマンドは、新しい字下げの文字数に必要なだけ先行するブランクとタブを置き換えます。count は、count 行シフトします。
!
外部コマンドを通してオブジェクトにフィルターをかけます。オブジェクトを入力してから コマンド行は、ex システム・コマンド (:!) と同じ方法で 構文解析されたシステム・コマンド用に開かれます。 この演算子により指定されたコマンドが起動されて、行ベースで そのコマンドにオブジェクトを丸ごと送信します。それにより、そのオブジェクトが削除されて コマンドからの出力がオブジェクトと置き換わります。例えば、1G!Gsort はファイルの最初の行に移動し、最初の行から最後の行までのテキストをとり、それを sort コマンドを通して実行します。sort の出力は、元のテキストに置き換わります。
以下の省略形のコマンドは、上記のオブジェクト操作と同じです。これらのコマンドの先頭には、操作されたテキストを保管するために count またはバッファーの名前を付けることができます。
C
現在行の終わりまで変更します。これは c$ コマンドと同等です。
D
現在行の終わりまで削除します。これは d$ コマンドと同等です。
s
文字を置き換えます。これは、cl と同等です。
S
行を置き換えます。これは cc と同等です。
x
現行の文字を削除します。これは dl コマンドと同等です。
X
直前の文字を削除します。これは dh コマンドと同等です。
Y
現在行を動かします。これは yy コマンドと同等です。

テキスト追加コマンド

テキスト追加コマンド は、すでにあるテキストに新しいテキストを追加します。
A
行の終わりで挿入モードに入ります。これは $a コマンドと同等です。
a
現行カーソル位置の後に挿入モードに入ります。
I
行の最初の非ブランク文字の前で挿入モードに入ります。これは ^i コマンドと同等です。
i
現行カーソル位置の前で挿入モードに入ります。
O
現在行の前に新しい行を開き、それで挿入モードに入ります。
o
現在行のあとに新しい行を開き、それで挿入モードに入ります。
R
画面の文字を次の ESC まで入力された文字と置き換えます。入力された各文字は、画面の文字にオーバーレイされます。改行文字は例外です。それは単に挿入され、他の文字に置き換わりません。これをしているときに、画面がファイルの内容どおりにならないかもしれません。これはタブその他のためです。画面は、挿入モードを離れるときに更新されます。
r
カーソルの下の文字を次の入力された文字と置き換えます。count があれば、カーソルに続く count 文字から新しい文字までが変更され ます。もし count があり改行文字が置き換える文字であれば、count 文字は削除され (通常どおり)、count 改行でなく、単一の改行文字で置き換えられます。

その他のコマンド

J
count 行を結合します。count を指定しないか count が 2 より 小さければ、vi は 2 を count として使用し、現在行と次の行を結合し ます。このコマンドは、適切なスペースを提供します。ワードとワードの間にはスペース 1 つ、ピリオドのあとは 2 つ、行の先頭文字が「)」であれば、スペースを挿入しません。行がホワイト ・スペースで終われば、vi はそのホワイト・スペースを保存し、さらにホワイト・スペースを追加することはせず、次の行を結合します。
p
テキストがカーソルの後でなく前に貼り付けられることを除いて p と 同じです。
P
バッファーの内容をカーソルの前に置きます。ペースト 操作とも呼ばれます。引用符 と buffername (例えば “b) が先行している場合は、そのバッファーの内容が使用されます。それ以外のときは名前のないバッファーの内容が使用されます。もしバッファーが ex モードで 作成されていれば、バッファーの内容は現在行の前に挿入されます。もしバッファーが vi モードで作成されていれば、バッファーの内容は カーソルの前に挿入されます。特別な場合として、もしペースト操作が ピリオド (.) コマンドで繰り返され、そしてそれが番号バッファーを使用していれば、バッファーの番号は増えます。したがって、“1p ... はバッファー 1 から 6 の内容 をペーストします。言い換えれば、削除された最後の 6 つのものが戻ってきます。
Q
ex モードに切り替わります。vi モードから離れ 、ex のプロンプトが画面の最下部の行に示されます。
U
現在行へのすべての変更を取り消します。行から離れるか、ex コマンドを行に 呼び出すかすれば、行の元の内容は消え、U は不成功に終わります。
u
最後の変更を元に戻します。これを繰り返せば、元に戻したことを元に戻すことになり ます (つまり、元に戻す前のテキストになります)。ある種の操作では、一度だけの変更として扱われます。例えば、グローバル G で行われたすべてはこれで元に戻されます。
ZZ
ファイルを書き出して、もし変更されていれば、終了します。
.
最後のコマンドを繰り返します。ファイルの内容を変更するコマンドをこれで繰り返す ことができます。count. コマンドで使用しなかった 場合は、vi は、繰り返されるコマンドに指定された count を 使用します。
~
カーソルの下の文字の大文字/小文字を切り替え、カーソルを右方に 1 つ移動します。このコマンドでは 、count 文字の大文字/小文字を変更するために count が先行することができます。
&
現在行をターゲットとして使用して、直前の ex 代替コマンドを繰り返します。直前の コマンドで設定されたフラグは無視されます。ex コマンド & と 同等です。
:
単一の ex コマンドを呼び出します。エディターはカーソルを画面の最下行に置き、入力をプロンプト指示するために (:) を表示します。それから 1 つまたは複数 の ex コマンドを入力することができます。ESC または RETURN を押せば、入力した行は ex に渡され、そこで実行されます。
@
マクロを呼び出します。次の文字が a から z で あれば、vi はそれをバッファーの名前とします。バッファーの内容は 、vi への入力として扱われます。マクロのテキストは、他のマクロを呼び出す @ を含んでいる可能性があります。マクロは、マクロの終わりで起動されれば、自分自身を呼び出すことがあります (末尾での反復)。そのようなマクロは、いつまでも実行され、エラーが起きるか INTERRUPT キーが 押されるかするまで続きます。初めに自分自身を起動するマクロは (当初反復)、メモリーがなくなるまでループします。vi エラーは、現在実行されているマクロをすべて終了させます。マクロ呼び出し中に行われたすべての変更は、1 つの単位として扱われ、単一の u コマンドで元に戻すことができます。
=
lisp オプションが指定されている場合は、lisp および自動字下げ設定 によって設定されているかのように、指定の行の字下げをし直します。
Ctrl-G
現行のパス名、現在行の番号、ファイルの行の総数、およびファイルの何 % までかの 進捗状況を表示します。これは、ex コマンド file と同等です。
Ctrl-L
他の処理がなにかを書き込んだという想定のもとに画面を再作成します。再作成されるのは、フィルター ! コマンドが標準出力でなく画面に書き込むときだけです。
Ctrl-R
@ の規則でフラグの付いた削除された行を除去して、画面を再作成します。
Ctrl-Z
エディターを停止して、システム・レベルに処理を戻します。fg コマンドで エディターに戻ることはできますが、この方法で vi セッションを再開すると、セッションのバッファーすべてが空です。jobs コマンドが、停止されて いる vi ジョブすべてをリストします。使用可能メモリーの量によって、ある時点で停止することのできる vi セッションの数は制限されます (fgjobs を参照してください)。
Ctrl-^
代替ファイルの編集に切り替わります (write の説明については ex を 参照してください)。これを試みても、最後の変更をしてからファイルを書き出していなければ 、vi は代替ファイルに切り替わりません。

挿入モード・コマンド

オブジェクト操作コマンド c およびテキスト追加 コマンド [AaIiOoRr] は、vi を INSERT モードに します。このモードでは、タイプされるたいていの文字はファイルに挿入されます。以下の文字は、特別の意味を持っています。
Ctrl-D
現在行の autoindent を 1 つ減少させます。変数 autoindent がオンのときのみ有効です。
Ctrl-H
最後の入力された文字を削除します。その文字は画面から除去されません。しかし、それはもはやファイルにはありません。文字の上をバックスペースすれば、新しいテキストが 古いテキストを上書きします。テキストの追加を開始した場所に関係なく、現在行の初めまで バックスペースすることができます。(vi の他のいくつかのバージョンには、これは当てはまりません。)
BACKSPACE
最後の入力された文字を削除します。その文字は画面から除去されません。しかし、それはもはやファイルにはありません。文字の上をバックスペースすれば、新しいテキストが 古いテキストを上書きします。テキストの追加を開始した場所に関係なく、現在行の初めまで バックスペースすることができます。(vi の他のいくつかのバージョンには、これは当てはまりません。)
Ctrl-J
現在行を終了し、新しい行を開始させます。
Ctrl-M
現在行を終了し、新しい行を開始させます。
RETURN
現在行を終了し、新しい行を開始させます。
Ctrl-Q
次の文字を、その持つ意味は使用せず、文字そのものとして追加します。この方法によって 、ESC 文字そのものをエスケープすることもできます。Ctrl-J または ヌル文字は、行に挿入できません。
Ctrl-V
次の文字を、その持つ意味は使用せず、文字そのものとして追加します。この方法によって 、ESC 文字そのものをエスケープすることもできます。Ctrl-J または ヌル文字は、行に挿入できません。
Ctrl-T
現在行の自動インデントを 1 つ増やします。変数 autoindent がオンのときのみ有効です。
Ctrl-W
カーソルの前のワードとブランクを削除します。削除された文字は画面から除去されませんが、ファイルにはもうありません。
Ctrl-@
もしこれが挿入モードに入って最初に入力された文字であれば、前に入力された挿入モードの内容が繰り返されます。そのあとで、挿入モードを終了してください。256 文字までが直前の追加から挿入されます。
ESC
挿入モードを終了します。
INTERRUPT
挿入モードを終了します。

ex コマンド・モード

vi は、プログラムが -e オプション付きで起動されるか、または Q コマンドが vi から発行された場合、ex コマンド・モードに入ります。 単独の ex コマンドを vi から : を使用して 出すこともできます。

ex コマンドの一般形は次のとおりです。
[address-list] [[command] [!] [parameters]]
各部分はオプショナルで、いくつかのコマンドでは無効です。1 行に複数のコマンドを指定するに は、OR バー | を使って分離してください。
address-list
コマンドは、ゼロ、1 つ、または 2 つのアドレスを持つことができます。アドレス % は、全体を指す簡略形です。どれかまたは全部のアドレスを省略することができます。以下のコメントの 説明で示されているアドレスは、コマンドがデフォルトで使用するアドレスです。想定されるデフォルトの アドレスは次のとおりです。
[.,.]
2 つのアドレスを持った行の範囲はデフォルトでは現在行となることを示します。
[1,$]
2 つのアドレスを持った行の範囲はデフォルトではファイル全体とな ることを示します。
[.+1]
単独のアドレスはデフォルトでは次の行となることを示します。
address
address は、編集されているテキストのある行を指します。アドレスは、以下の形式を含む式とすることができます。
.
ドットの値、すなわち現在行です。
n
ファイルの絶対行を指す行の番号です。最初の行が絶対行番号 1 です。
$
ファイルの最後の行です。
+[n]
ファイルの順方向の n 行です。n を省略すると、デフォルトは 1 です。
-n]
ファイルの逆方向の n 行です。n を省略すると、デフォルトは 1 です。
'x
マーク x の値です。
/pat/
正規表現 pat を、現在行から順方向に探します。
?pat?
正規表現 pat を、現在行から逆方向に探します。
例えば、
/pattern/+3
++
100
は 3 つのアドレスです。最初のアドレスはパターンを探し、それから 3 行進みます。2 番目は ドットのあとの 2 行を意味します。3 番目はファイルの 100 行目を指します。
コマンド
command は、ワードで、省略することもできます。大括弧で示した文字はオプションです。例えば、次のように指定します。

a[ppend]
append コマンドが a に省略できることを 示します。
!
コマンドによっては異体をもっています。これは通常、感嘆詞 (!) がコマンドのすぐ後ろに付いています。
parameters
多くの ex コマンドは、パラメーターを使ってコマンドにより多くの情報を 指定することが可能です。共通のパラメーターは、以下のとおりです。
buffer
テキストを保管するための名前のある区域の 1 つを指定します。
count
これは正の整数で、コマンドで影響される行の数を指定します。count の指定のないとき は、デフォルトは 1 です。
file
ファイルのパス名です。file% 文字があれば、vi は 現行ファイルのパス名でそれを置き換えます。file# 文字があれば 、vi は代替ファイルのパス名でそれを置き換えます。ファイルを指定しなければ、デフォルトは現行ファイルです。
flags
コマンドの実行後にとるべきアクションを指示します。先行する (+) 符号 および (-) 符号を付けて現在行標識の値を調整することができます。また pl あるいは # を 後ろに付けてファイルを出力、リスト、または番号付けすることができます。例えば、
.+5 delete 6 ++#
は、ドットから 5 行下で始まる 6 行を削除します。現在行標識はそれに続く行に設定され、2 だけ増加します。そして、その行は 行番号と共に出力されます。

ex コマンド

これらのコマンドは、ex モードに示されたように入力することができます。vi モード では、コロン (:) 文字で先行されなければなりません。
ab[breviate] lhs rhs
ワード lhsrhs の省略形として 解釈されることを指示します (ワード の定義については、コンテキスト依存移動コマンドを参照してください)。 もしホワイト・スペースで 囲まれた lhsvi 挿入モードで入力すると、それは自動的に rhs に 変更されます。ab コマンドで引数をまったく指定しなければ、すでに定義された省略形 が表示されます。省略名は、# またはいずれの句読点も持つことはできません。
[.] a[ppend][!]
ex 挿入モードに入ります。テキストは読み取られ、指定された行の後に置かれ ます。1 つのピリオド (.) のある入力行は、挿入モードから出ます。ゼロの アドレスを指定すれば、テキストはファイルの最初のアドレスの前に追加されます。現在行標識は、入力された最後の行を指します。

感嘆符 (!) が指定されると、autoindent オプション が入力中に切り替えられます。このコマンドは、vi モードから呼び出すことはできません。

ar[gs]
編集されているファイルの現行リストが表示されます。現行ファイルは、離れた大括弧で囲んで表示されます。
cd[!] path
現行ディレクトリーを path に変更します。path を省略すると、cd は現行作業ディレクトリーを HOME 環境変数で識別されたディレクトリーに設定します。もし path が相対パス名であれば、cd は CDPATH 環境変数で指定されたディレクトリーを使ってそれを探します。もしパスが - であれば、cd は直前の作業ディレクトリーに変更します。最後の 書き込み後バッファーを変更していれば、vi は警告メッセージを表示します。感嘆符 (!) を 含めることによりこれを抑えることができます。
[.,.] c[hange][!] [count]
与えられた範囲の行を削除して、挿入モードに入ります。感嘆符 (!) が指定されると 、autoindent オプションが入力中に切り替えられます。このコマンドは 、vi モードから呼び出すことはできません。
chd[ir][!] [path]
cd と同じです。
[.,.] co[py] addr [flags]
与えられた範囲の行を addr の後にコピーします。もし addr がゼロならば、行はファイルの最初の行の前に追加されます。現在行標識は、挿入されたコピー・テキストの最終行を指します。
[.,.] d[elete] [buffer] [count] [flags]
指定された範囲の行を削除します。その範囲の行が削除されたあと、現在行標識は削除された範囲の後の行を指します。buffer は 文字 a-z で指定することができます。この場合、削除された行はその名前のバッファーに保管されます。buffer に大文字が指定されれば、それらの行は対応する小文字の名前のバッファーに追加されます。バッファーの名前がなければ、削除された行は名前のないバッファーに置かれます。
e[dit][!] [+line] [file]
新しいファイルで新しい編集セッションを開始します。新しいファイルは、画面の古いファイルと置き換わります。vi または ex コマンド (例えば、-B または -W オプション) で指定したテキスト変換が使用されます。このコマンドでは、現行ファイルの内容を変更したのに それをファイルに書き戻していない場合は、通常無効です。感嘆符 (!) を指定すれば 、たとえ現行セッションの変更を保管していなくても、新しいセッションが開始されます。

line を、行番号か、/regexp または ?regexp の 形のストリングとして指定することができます。ここで regexp は正規表現です。line が行番号であれば、現在行標識は指定された位置に設定されます。これが /regexp の形を持っていれば、viregexp の最初のオカレンスを求めてファイルを順方向に探し、現在行標識をその行に設定します。?regexpvi がファイルを逆方向に検索することを 除いて /regexp と同様です。line を省略し、かつ、ファイルを指定しないと、現在行標識の値は変更されません。しかし、ファイルを指定すれば、現在行標識は、コマンドが vi モードであるか ex モードのいずれで出されたかによって、バッファーの最初または最後の行のいずれかに設定されます。

ex[!] [+line] [file]
新しいファイルで新しい編集セッションを開始します。新しいファイルは、画面の古いファイルと置き換わります。vi または ex コマンド (例えば、-B または -W オプション) で指定したテキスト変換が使用されます。このコマンドでは、現行ファイルの内容を変更したのに それをファイルに書き戻していない場合は、通常無効です。感嘆符 (!) を指定すれば 、たとえ現行セッションの変更を保管していなくても、新しいセッションが開始されます。

line を、行番号か、/regexp または ?regexp の 形のストリングとして指定することができます。ここで regexp は正規表現です。line が行番号であれば、現在行標識は指定された位置に設定されます。これが /regexp の形を持っていれば、viregexp の最初のオカレンスを求めてファイルを順方向に探し、現在行標識をその行に設定します。?regexpvi がファイルを逆方向に検索することを 除いて /regexp と同様です。line を省略し、かつ、ファイルを指定しないと、現在行標識の値は変更されません。しかし、ファイルを指定すれば、現在行標識は、コマンドが vi モードであるか ex モードのいずれで出されたかによって、バッファーの最初または最後の行のいずれかに設定されます。

f[ile] [file]
現行ファイルの名前を file に変更して 、[Not edited] とマークします。もしこ のファイルが存在すると、write コマンドの異体である感嘆符 (!) なしでは上書きできません。write コマンドのバリアントです。
[1,$] g[lobal][!] /pat/ [commands]
与えられた範囲ですべての行を pat とマッチングさせます。一致する行で 、commands が実行されます。もし感嘆符 (!) ではないものが設定されていれば、commands は一致しない行で実行されます。これは vi コマンドを使用するのと 同じです。

global コマンドと undo コマンドは commands の リストに指定することができません。後に続く undo コマンドは、全 global コマンドの効果を 元に戻します。ex モードでは、最後のコマンド行以外を円記号 (¥) で 終わることにより複数のコマンド行を入力することができます。入力を受け入れるコマンドも許されます。入力はコマンド・リストに含まれ、最後の ピリオド (.) はリストの終わりで省略することができます。例えば、g/rhino/a¥ hippo は、単一の行 hipporhino がある各行に追加します。 delim は、任意の英字でない文字です。グローバル・コマンド・リストの全長には制限があります (制限 を参照してください)。

[.] i[nsert][!]
ex INSERT モードに入り、テキストを読み、それを 指定された行の前に置きます。それ以外は、append コマンドと同じです。このコマンドは、vi モードからは入力できません。
[.,.+1] j[oin][!] [count] [flags]
ある範囲内のテキストの行を結合します。もし感嘆符 (!) が指定されていなければ、隣接する結合された行の間のホワイト・スペースはすべて削除されます。直前の行がピリオドで終われば スペースが 2 つ追加されます。また、結合された行が左括弧で始まればスペースは追加されず、それ以外の場合は 1 つのスペースが追加されます。
[.] k x
mark コマンドと同じです。
[.,.] l[ist] [count] [flags]
視覚的に明瞭な方法で行の範囲を表示します。このコマンドは、 タブを ^I で、また行の終わりを $ で表示します。唯一有効なフラグは # で、これは行番号付けを意味します。現在行標識は、表示されている最後の行を指します。
map[!] lhs rhs
これは、vi で使用されるマクロを定義します。lhs は文字のストリングです。このストリングが正しく入力されたときは、vi は、rhs が入力されたとして 動作します。もし lhs が 2 文字以上長ければ、lhs に無い文字がタイプされる か (この場合 lhs にあるその点までのすべての文字が実行されます)、また は lhs の最後の文字がタイプされるまでは、どの文字もエコーされることも実行されることもありません。もし変数 remap が設定されれば 、rhs それ自身はマクロを含むことができます。もしフラグ ! が指定されれば、マップは vi 挿入モードに適用されます。それ以外の場合は、コマンド・モードに適用され ます。map コマンドは、引数がなければ、現在定義されているすべての コマンドをリストします。
[.] ma[rk] x
単独の小文字 x でマークされている指定された行を記録します。その行は、このあと、どの点でも 'x でアドレスする ことができます。
[.,.] m[ove] [addr] [flags]
与えられた addr の後に指定された行の範囲を移動します。もし addr が ゼロであれば、テキストはファイルの初めに移動されます。現在行標識は、移動した最後の行に設定されます。
n[ext][!] [+command] [file ...]
ファイル・リストにある次のファイルの編集を開始します。ここでファイル・リストは、コマンド行に指定されていたか、または直前の next コマンドにあったものです。vi または ex コマンド (例えば、-B または -W オプション) で指定したテキスト変換が使用されます。最後の書き込みの後に現行ファイルを変更した場合は、ex は通常は、ユーザーが現行ファイルから離れることを禁止します。しかし 、感嘆符 (!) を指定すると、禁止ではなくなります。もし autowrite が設定されていれば、現行ファイルは自動的に書き込まれ、次のファイルへ行くことができます。ファイル・リストが 指定されていれば、それが新しいファイル・リストになります。必要ならば、このリストの式は以下のように拡張することができます。例えば、
next *.c
これは、ファイル・リストを .c で終わる名前を 持った (通常は C ソース・ファイル) 現行ディレクトリー内のすべてのファイルに設定します。
[.,.] nu[mber] [count] [flags] [.,.] # [count] [flags]
先行する行番号で指定された行の範囲を表示します。現在行標識は、表示されている最後の行を指します。
[.] o[pen] [pat] [flags]
オープン・モードに入ります。これは、単に単一のオンライン・ウィンドウを 持つ vi モードです。指定された行に正規表現 pat との一致があれば、カーソルは一致するパターンの先頭に置かれます。
pre[serve]
現行バッファーを、後で recover コマンドで -r オプションを使用してリカバリーできる形式で保管します。vi は、ユーザーにこのファイルがリカバリーできること、およびそのリカバリー 方法を説明します。
[.,.] p[rint] [count] [flags]
指定された行の範囲を表示します。現在行標識は、表示されている最後の行を指します。
[.] pu[t] [buffer]
削除された、あるいは引き抜かれた行を、与えられた行のあとのファイルに戻して ペーストします。バッファーの名前が与えられていなければ、最後に変更されたバッファーが 使用されます。

edit コマンドはバッファーを破壊しないので、ファイル間にテキストを 移動するのに putyank とを結合してこのコマンドを送る ことができます。

q[uit][!]
vi または ex を終了します。現行ファイルが変更されていれば、感嘆符 (!) を使用する必要があります。使用しないと、ファイルを書き込むまで終了することができません。
[.] r[ead][!] [file]
file の内容を読み取り、それを現行ファイルの指定された行番号の後に 追加します。vi または ex コマンド (例えば、-B または -W オプション) で指定したテキスト変換が使用されます。もし行番号が 0 であれば、与えられたファイルの内容は編集されているファイルの 先頭に挿入されます。もし現行ファイル名が設定されていなければ、file が与えられなければ なりません。それが現行ファイル名になります。それ以外は、もし file が 与えられれば、それが代替ファイル名になります。file を 感嘆符 (!) で始めると、それはシステム・コマンドとして扱われます。パイプは、コマンドからの出力を指定の行番号の後に 読み入れるために使用されます。
rec[over] [file]
もし file が、preserve コマンド、システム、またはエディターの破損の結果として 保管されたのであれば、それをリカバリーしようとします。file を指定しなかった場合、このコマンドはすべてのリカバリー可能なファイルのリストを表示します。
rew[ind][!]
ファイルの引数リストを先頭まで巻き戻します。そしてリストにある最初のファイルの 編集を開始します。vi または ex コマンド (例えば、-B または -W オプション) で指定したテキスト変換が使用されます。現行ファイルが変更されていれば、感嘆符 (!) が指定されなければ なりません。そうしない場合は、ファイルを書き出すまで現行ファイルから離れる ことができません。もし autowrite が設定されていれば、現行ファイルは自動的に必要なときに書き出されます。
se[t] [parameter-list]
オプション変数の値を割り当てるか表示します。パラメーター・リストを 指定しなければ、set はすべての変数を、編集セッションが 開始したあと変更された値と共に、表示します。もしパラメーター all が指定されれば 、ex はすべての変数とその値を表示します。ユーザーは、多くの変数の値のおのおのを設定または表示するのにパラメーター・リストを 使用することができます。リストにある各引数は、変数の名前です。それが ブール変数であれば、名前に no の接頭部があるかないかにより、値 はオンまたはオフに設定されます。引数を非ブール数だけにすると、その値 の表示要求になります。ブール変数の値は、名前に疑問符 (?) を付けることにより 表示させることができます。数値またはストリング変数は、name=value で設定することができます。ストリング変数では、スペースの前に円記号が存在する必要があります。例えば、次のように指定します。

set readonly? noautowrite shell=/bin/sh
は、readonly フラグの値を表示し、noautowrite を設定し、shell を /bin/sh に設定します。
set report report=5
これは、report 変数の値を表示し、それから値を 5 に設定します。詳細は、vi オプションの設定を参照してください。
sh[ell]
子シェルを呼びます。環境変数 SHELL が、実行されるシェルの名前を検出するのに使用されます。
so[urce] file
file からエディター・コマンドを実行します。source と共に 実行されているファイルは、それ自身の source コマンドを含むことができます。
st[op]
エディター・セッションを延期し、システム・レベルに戻します。詳細については、vi コマンド Ctrl-Z の説明を参照してください。
[.,.] s[ubstitute] [/pat/repl/] [options] [count] [flags]
正規表現 pat を、指定された行の範囲にある各行で検索し、一致するストリングを repl で置き換えます。

通常は、ex は、各行の最初の一致ストリングだけを置き換え ます。optionsg [global] が入っていれば、すべての一致ストリングを変更します。

optionsc [confirm] を 持っていれば、expat の一致した位置をマークするとともに、 曲折アクセント記号 (^) のある行を印刷します。 次に、y に置換を続行させたければ、y と入力することができます。pat は行の境界を超えてマッチングさせることはできませんが、ex モードでは、円記号 (¥) を前に付けてエスケープする ことにより repl に改行を入れることができます。patrepl 両方に関する詳細情報は 、正規表現 (regexp)を参照してください。もし pat または repl がなければ、ex は 最後に指定された正規表現または置換ストリングを使用します。patrepl を 区切るために、スラッシュ (/) の代わりに任意の英字でない文字を使用することができます。

su[spend]
これは stop コマンドと同義です。
[.,.] t addr [flags]
これは copy コマンドと同義です。
ta[g][!] tagname
変数 tags にリストされているファイルで tagname を探します。もし タグの名前がタグ・ファイルにあれば、そのファイルはまた、タグとそのタグを そのファイルで見つけるために必要な正規表現を含む、ファイルの名前を持っています。もし与えられたファイルが現在編集しているファイルと異なる ときは、ex は通常は新しいファイルの編集から始めます。vi または ex コマンド (例えば、-B または -W オプション) で指定したテキスト変換が使用されます。しかし、最後に書き出したあとで 現行ファイルが変更されているときは、tag コマンドが感嘆符 (!) を持っていない限り 、ex は新しいファイルの編集を開始しません。もし autowrite がオンであれば、現行ファイルは自動的に書き出され、新しいファイルが読み取られます。新しいファイルが読み取られた ときは、タグ・ファイルからの正規表現が、magic 変数をオフにして呼び出されます。

タグの名前は通常、C ソース・ファイルで C の関数定義を見つけるのに 使用されます。最初のステップは、ctags コマンドを使用して tags ファイルを 作成することです。このあとで、ex tag コマンドを使って 特定の関数定義を探し、それを持っているファイルにあるその定義に直接行くことができます。

タグの名前のすべての文字は、変数 taglength がゼロ以外でないかぎり 区別されなければなりません。この場合は、与えられた数の文字のみが比較のため に使用されます。

una[bbreviate] lhs
前に abbreviate によって作成された省略形 lhs は 削除されます。
u[ndo]
最後の変更またはバッファーを変更した一連の変更を元に戻します。グローバル と vi マクロは、両方とも元に戻される単独の変更として扱われます。2 番目の undo は、前の状態を復元する undo です。edit コマンドは元に戻せません。というのは、それは undo 情報を保持するのに使用される 一時ファイルを、きれいに消してしまうからです。また、オペレーティング・システムの コマンドやファイル・システムに出力を書き込むコマンドは元に戻せません。
unm[ap][!] lhs
lhs マップを削除します。もしフラグ ! があれば、これは挿入モードの マップに適用されます。フラグがなければ、コマンド・モードのマップに適用されます。
[1,$] v /pat/ commands
これは ! の付いた global コマンドと同義語です。 つまり、すべての不一致の行に対するグローバルです。pat を区切るために、スラッシュ (/) の代わりに任意の英字でない文字を使用することができます。
ve[rsion]
vi または ex の現行バージョンの情報を表示します。
[.] vi[sual] [type] [count] [flags]
vi モードに入ります。type が指定されていなければ、現在行は画面のトップにあります。もし type が 曲折アクセント記号 (^) であれば、画面の最下行は現在行の 1 ウィンドウ前です。type が負符号 (-) なら、現在行は画面の最下部です。type が ピリオド (.) なら、現在行は画面の中央です。

undo コマンドを使用して、vi コマンド中に起きたすべての 変更を元に戻すことができます。

[1,$] w[rite][!] [>>] [file]
与えられた範囲の行を file に書き込みます。vi または ex コマンド (例えば、-B または -W オプション) で指定したテキスト変換が使用されます。2 つの 不等号括弧 (>>) が含まれていれば、行はファイルの現在の内容に追加されます。現行ファイル名が設定されていなければ 、file を指定する必要があります。これが現行ファイル名になります。設定されているの に file を指定すると、それは代替ファイル名となります。file を 感嘆符 (!) で始めると、それはシステム・コマンドとして扱われます。vi は、指定された範囲をパイプを介してコマンドに書きます。

file を指定する場合は、それはすでに存在するものであってはなりま せん。変数 readonly は 設定されていてはなりません。もし file が与えられなければ、ファイルは編集されなければなりません。つまり、それは読み取られたときと同じでなければなりません。すべてのこれらの条件は、フラグ ! で抑えることができます。

[1,$] wn[!] [>>] [file]
すぐあとのファイル・リストの次のファイルの編集を始めることを除いて 、write と同様です (書き込みが正常に行われた場合)。
[1,$] wq[!] [>>] [file]
すぐあとのエディターを終了することを除いて、write と同様 です (書き込みが正常に行われた場合)。
x[it]
最後の書き込み後現行ファイルが変更されていれば、指定された範囲とファイル名を 使用して write コマンドが実行されます。
[.,.] y[ank] [buffer] [count]
与えられた行の範囲を指定され た buffer (az の間の文字) にコピー します。バッファーが指定されなければ、名前のないバッファーが使用されます。バッファー は edit コマンドでは破棄されません。したがって yankput は、ファイルにテキストを移動するのに使用することができます。

edit コマンドはバッファーを破壊しないので、ファイル間にテキストを 移動するのに putyank とを結合して このコマンドを使用することができます。

[.+1]z [type] [count] [flags]
count 行を表示します。カウントが指定されなければ 、exscroll 変数の現行値を使用します。ここで表示される行 は type によって指定された行です。もし type が正の符号 (+) で あれば、エディターは指定された行とそれ以降をスクリーンに表示します。type が ピリオド (.) なら、エディターは指定された行を中央に 示したスクリーンを表示します。 もし type が負符号 (-) であれば、エディターは指定された 行を最後の行として示したスクリーンを表示します。type が曲折アクセント記号 (^) であれば、 エディターは、それの前にスクリーンを表示します。type が等号 (=) であれば、現在行が画面の中央にきて、ハイフンの行がその直前と直後に出力されます。現在行標識は、表示されている最後の行を指します。
[.,.] <[<...] [count] [flags]
行の範囲を shiftwidth 変数の値だけシフトします。左不等号括弧 (<) を複数個付けると、その数だけシフトします。現在行標識は、表示されている最後の行を指します。もし count が指定されれば、指定された数の行がシフトします。
[.,.] >[>...] [count] [flags]
行の範囲を右に shiftwidth 変数の値だけシフトします。右不等号括弧 (>) を複数個付けると、それぞれがシフトします。現在行標識は、表示されている最後の行を指します。もし count が指定されれば、指定された数の行がシフトします。
[range] ! command
SHELL 環境変数で指定されたコマンド・インタープリターで実行される command をサブミットします。 もし range が与えられれば、その行の範囲の内容を入力として command は 呼び出されます。command からの出力は、それからその行の範囲に置き変わります。したがって、1,$!sort は、ファイルの全内容をソートします。

置換は、command が実行される前にこの command に対して行われます。感嘆符 (!) の オカレンスは、前の command 行で置き代わり、オカレンスのパーセント (%) と井桁マーク (#) 文字は 現行と代替のファイルのパス名にそれぞれ置き変わります。もしそのような置換が実際に起きれば、新しいコマンド行が、それが実行される前に 表示されます。(現行ファイルと代替ファイルについての詳細は、ex コマンド・モードread セクションと write セクションを参照してください。)

もしファイルが変更されていて変数 autowrite がオンであれば、ファイルはコマンドを呼び出す前に書き込まれます。autowrite がオフのときは、警告メッセージが出されます。

[$] =
与えられた行番号を表示します。デフォルトの行番号はファイルの最後の行です。現在行標識は 変更されません。
a line of text
これは、コメントです。
[.,.] & [options] [count] [flags]
最後の代替コマンドを繰り返します。もし optionscount、または flags のどれかが指定されて いれば、それは前の代替コマンドの対応する項目を置き換えます。
[.,.] ~ [options] [count] [flags]
最後の代替コマンドを繰り返します。しかしながら、使用される正規表現は最後に使われた正規表現です。つまり、そこに search があったならば 、search の正規表現が使用されます。簡単な、引数の ない substitute または & コマンドは、前の代替からの正規表現を使用します。空の正規表現を持つ substitute は、~ のような最後の正規表現を使用します。もし optionscount、または flags のどれかが指定されて いれば、それは前の代替コマンドの対応する項目を置き換えます。
@ buffer
ex コマンドのように、buffer にある各行を実行します。buffer を 指定しないか、@ という名前のバッファーを指定すれば、最後に実行されたバッファーが使用されます。
Ctrl-D
scroll 変数で与えられたテキストの行の番号を表示します。現在行標識は、表示されている最後の行を指します。

ex コマンドの特殊文字

ex コマンドがパーセント文字 (%) を持っていれば、この文字は現行ファイルの名前で 置き換えられます。 例えば、マクロを試行しようとして、そのマクロがファイルを壊す可能性があるときは、以下のようにします。
!cp % /tmp
現行ファイルは、これで安全な保留場所にコピーされます。他の例としては、マクロでパーセント記号 (%) を使用して、現行ファイルを参照することができます。
ex コマンドが井桁マーク (#) を持っていれば、この文字は 代替ファイルの名前で置き換えられます。代替ファイルの名前は、前に説明した read コマンドで設定できます。したがって、次のようなコマンド
e #
は、ex に代替ファイルを編集することを命令します。代替ファイルの使用は、同時に編集したい 2 つのファイルがあるときに便利です。上に挙げたコマンドで、2 つのファイルの間を行き来することができます。

vi オプションの設定

set コマンドで、オプションを設定することができます。以下に例を示します。
set autowrite
このコマンドは、 autowrite オプションを設定します。フラグであるオプション、つまり数値でないオプションの場合、 次のように、set コマンドの中の名前の前に no を置くことによって、 変数をオフにすることができます。
set noautowrite
以下のリストの変数では、デフォルトがオフの場合には、その変数の前に no が付きます。各オプションの最小の省略形が、コンマの後に示してあります。 デフォルト値は、等号 (=) の後ろに示してあります。
autoflushaf
このオプションは、設定されると、システム・クラッシュが起こった 場合にユーザーが失うことになる最大秒数のデータを保持します。vi は、現行編集バッファーに変更が行われていないか、またはユーザーが何もしないでいるのでない限り、おおよそこのほとんどの秒数、メモリーを一時ファイルにフラッシュします。 これにより、最終的には (exrecover デーモンおよび vi -r が実行された後で) 編集バッファーのより最新の表示をリカバリーできるようになります。 これは exrecover デーモンによって使用される vi の一時ファイルが断続的に更新されるからです。
以下のコメントに注意してください。
  • デフォルトは 120 秒 (2 分) に設定されます。
  • このオプションをオフにするためには、autoflush を 0 に 設定します。
  • このオプションは、読み取り専用ファイルには影響ありません。
  • このオプションは以前の preserve オプションとは異なります。このオプションは /etc/recover/$LOGNAME にあるリカバリー済みファイルとは異なり、vi の一時ファイルに作用するからです (このファイルの位置は、環境変数 TMP_VI、TMPDIR、または TMP によって指定されます)。
autoindentai
autoindent がオンのときテキストを入力すると、現在行の字下げが改行のたびに使用されます。vi モードでは、このデフォルトの字下げを、制御キー Ctrl-D (左方にシフト) または Ctrl-T (右方にシフト) を使用することにより、変更することができます。ex モードでは、行の開始でタブやスペースをタイプすれば、字下げを増やすことができます。また行の開始で Ctrl-D を入力してレベルを除去することもできます。^Ctrl-D は、現在行について一時的に字下げを除去します。 0Ctrl-D は、現在行をゼロの字下げレベルとします。次の行もこの同じ字下げレベルになります。

字下げレベルのサイズは、変数 shiftwidth. で定義されます。この値 と tabstop の値とに基づき、エディターは要求される字下げレベルを 作るために必要なタブとスペースの数を生成します。

デフォルトは noautoident です。

autoprintap
このオプションが ex モードで設定されると、現在行は次の コマンドの後で出力されます。copydeletejoinmovesubstituteundo&~<、および > のコマンドです。グローバル・コマンドの中では、行の自動的な表示は行われません。

デフォルトは autoprint です。

autowriteaw
このオプションがオンのときは、現行ファイルが最後の書き込み後に変更されていて、コマンド nextrewindtag、Ctrl-^ (vi)、および Ctrl-] (vi) のどれかが実行された場合に、現行ファイルは自動的に書き出されます。 感嘆符 (!) を これらのコマンドと共に使用すれば、この自動的な書き出しは停止されます。

デフォルトは noautowrite です。

beautifybf
このオプションがオンのときは、エディターはすべての非出力文字を、ファイルから読み取られたテキストから廃棄します。

デフォルトは nobeautify です。

cdpath
ディレクトリーを変更するときに関係するパス名を 検索するために、cd により使用されます。項目をコロン (:) で区切ることが必要です。もし現行ディレクトリーを 検索に含めるときには、ドット (.) でそれを指示しなければなりません。cdpath はデフォルトで CDPATH 環境変数の内容に設定されます。この環境変数がない場合は、ドット (.) に設定されます。
directory、dir
エディターが与えられたディレクトリーで、固有の名前で一時ファイルを使用します。この一時ファイルでのエラーは致命的です。

デフォルトは directory=tmp です。

edcompatible
このオプションがオンのときは、エディターは置換コマンドが ed エディター と互換性があるように動作させようと試みます。代替コマンド の gc オプションは記憶され、それらの オカレンスが切り替えられます。r オプションは、最後の代替正規表現ではなく、最後の正規表現を使用します。パターン全体としてのパーセント記号 (%) は、直前のパターンと 同等です。

デフォルトは nocompatible です。

errorbellseb
このオプションがオンのときには、vi アラート文字と共にエラー・メッセージ を先行させます。これがオフのときには、エディターは端末のスタンドアウト・モード (例えば反転表示) を使用して、メッセージを表示しエラーを警告します。

デフォルトは noerrorbells です。

exrc
このオプションがオンのときには、exvi は、初期化時に現行ディレクトリー内の任意の .exrc を アクセスします。これがオフのときには、exvi は、現行ディレクトリーが HOME ディレクトリーでないかぎり、それらのファイルを無視します。
home
cd により宛先ディレクトリーとして使用されます。パスを指定しない場合は、home がデフォルトで HOME 環境変数の内容に設定されます。この環境変数がない場合は、vi 開始ディレクトリーに設定されます。
ignorecaseic
このオプションがオンのときには、ストリングと正規表現をマッチングさせるとき、大文字/小文字の区別は無視されます。

デフォルト noignorecase です。

linedelete
vi は、ユーザーの指定により、行削除文字を自動的に現行端末の 行削除文字として設定します。vi の中では、行削除文字は linedelete 変数で設定することができます。ユーザーが指定した値は、行削除文字の数値です。デフォルトは 0x15、Ctrl-U の ASCII の値です。他の値は、Ctrl-X の 0x18 です。
リスト
このオプションがオンのときには、タブはブランクで拡張されず 曲折アクセント記号 (^) で表示されます。そして、行の終わりは ドル記号 ($) で示されます。

デフォルトは nolist です。

magic
このオプションがオフのときには (nomagic)、正規表現文字 の ^ ¥$ のみが 特別の意味を持つ文字となります。すべての他の正規表現のメタキャラクターは、特別の意味を持つためには、円記号 (¥) が先行しなければなりません。

デフォルトは magic です。

maxbuffers
エディター・バッファーとして使用される K 単位 (1024 バイト) のメモリーの数 です。これは 16 K 単位で割り当てられます。

デフォルトは maxbuffers=512 ですが、それが開始時に利用不能でないときは、実際に獲得できた数になります。すくなくとも、32 K は必要です。これは vi が必要とする コードとデータのためのスペースに追加して必要となる量で、これは 128 K の大きさ です。maxbuffers の変更はできません。

mesg
このオプションがオンのときには、ex は、ユーザーが vi モードにい る間、他のユーザーが write または talk コマンドを 使用してそのユーザーの端末に書き込みができるようにします。以下のコマンド
mesg n
は、この変数を変更します (mesg を参照)。このオプションは、mesg をサポートしないシステムには影響しません。
numbernu
このオプションがオンのときには、編集中のテキストの左方に行番号が表示されます。

デフォルトは nonumber です。

paragraphs
この文字ペアのリストは、段落間の移動を vi モードのときに制御します。リスト にあるいずれかの文字のペアがあとに続くと、ピリオド (.) で始まる 行は、段落の境界になります (例えば、.IP)。そのような行は、一般的にはテキスト・フォーマッターに対するコマンドです (例えば 、nrofftroff)。

デフォルトは paragraphs="IPLPPPQPP LIpplpipbp"" です。

prompt
このオプションがオンのときには、ex コマンド・モードは、コロン (:) でプロンプトを出します。入力が端末から読み込まれないときには、プロンプトはありません。

デフォルトは prompt です。

pwd
これは読み取り専用変数です。値は常に現行作業ディレクトリーを指します。そして、cd コマンドでのみ変更できます。
quiet
このオプションがオンのときには、vi はファイルの通知メッセージを 表示しません。

デフォルトは -s オプションで設定されます。

readonly
このオプションがオンのときには、vi はユーザーが 現行ファイルに書き込むのを防止します。

デフォルトは現行ファイルの許可によります。もしユーザーにファイルの write 許可がなければ、デフォルトは readonly です。それ以外の場合、デフォルトは -R オプションで設定されます。

remap
このオプションがオンで map マクロが展開されれば、この展開は、これにも map マクロが含まれているかどうか、再検査されます。

デフォルトは remap です。

報告する
エディターは、ユーザーがこの行数以上に影響を与える、コマンドを出すたびに メッセージを表示します。

デフォルトは report=5 です。

restrict
すべてのファイル名は現行ディレクトリーに制限されます。サブコマンドを呼び出すことはできません。この変数は、エディターが文字 r で始まる (例えば 、rvi) コマンドで呼び出されると自動的に設定されます。このオプションがオンになって いるときは、オフにすることはできません。

デフォルトは norestrict です。

スクロールする
これは、z ex および Ctrl-D (ex) コマンドのスクロールする行の数を設定します。

デフォルトは、変数 window の値を 2 で割った数です。

セクション
この文字ペアのリストは、セクション間の移動を vi モードのときに 制御します。リストにあるいずれかの文字のペアがあとに続くと、ピリオド (.) で始まる行は、セクションの境界になります (例えば、.SH)。そのような行は、一般的にはテキスト・フォーマッターに対するコマンドです (例えば 、nrofftroff)。

デフォルトは sections="SHNHH HU" です。

shellsh
これは ! コマンドおよびシェル・コマンドに対して使用される コマンド・インタープリターの名前です。デフォルト値 は SHELL 環境変数から取られます。
shiftwidthsw
これは、シフト・コマンドと autoindent で使用される字下げの幅を設定します。

デフォルトは shiftwidth=8 です。

showmatchsm
このオプションがオンで、右小括弧または右中括弧が 入力モードでタイプされると、カーソルは対応する小括弧か中括弧へ移動します。そこに 1 秒ほど留まり、そしてユーザーが置いた所に戻ります。こうしてユーザーに、小括弧/中括弧の開きと閉じの関係に注意を促します。

デフォルトは noshowmatch です。

showmode
このオプションがオンのときには、vi は画面の右下隅に、挿入/オープン/変更/置換のうちのどのモードであるか示すインディケーターを表示します。 インディケーターの表示がなければ、コマンド・モードです。

デフォルトは noshowmode です。

tabstop
vi モードでの画面表示のタブ停止位置は、この数の倍数で設定されます。

デフォルトは tabstop=8 です。

taglengthtl
もしこの変数がゼロ以外であれば、タグはこの数の文字数だけで比較されます。

デフォルトは、taglength=0 です。

tags
この変数の値は、円記号 (¥) とそれに続くスペースで分離された、ファイル名のリストです。 スペースの前に円記号がなければ 、vi は 2 番目とその後に続く タグを option=value の組み合わせの部分として扱います。例えば、次のように指定します。

set tags=file1¥ file2¥ file3¥

これらは tag ex コマンドおよび Ctrl-] vi コマンドで使用されます。ファイルは 一般的には ctags プログラムで作成されます。

デフォルトは tags=tags です。

term
この変数の値は端末タイプです。TERM 環境変数が この変数のデフォルト値を指定します 。
terse
このオプションがオンのときには、メッセージは省略された形で表示されます。デフォルトは noterse です。
warn
このオプションがオンのときには、感嘆符 (!) の付いたコマンドは、現行ファイルが変更された場合に警告メッセージを出力します。オフのときは、メッセージは出力されません。

デフォルトは warn です。

window
この変数は、vi モードで使用可能なテキスト行の数、またはコマンド用に表示するデフォルトの行数を与えます。

デフォルトは -w オプションで与えられます。-w オプションを指定しない場合、その値のデフォルトは、環境変数 LINES か、または TERM の terminfo データベースで検出された値になります。

wrapmargin wm
この変数が vi 挿入モードでゼロ以外の値であれば、行が画面の右方から この数の文字に達したとき、現行のワードは次の行に自動的に移動します。Enter キーを押す必要はありません。

デフォルトは wramargin=0 です。

wrapscanws
このオプションがオフならば、順方向の検索がファイルの終わりで停止し、逆方向の検索はファイルの先頭で停止します。

デフォルトは wrapscan です。

writeanywa
このオプションがオフならば、エディターは [Not edited] と マークされたファイルを既存ファイルに上書きさせません。

デフォルトは nowriteany です。

正規表現

多くの ex コマンドは、テキストを検索して置き換えるときに正規表現を使用します。正規表現 (コマンドの記述で pat で示されます) は、一連の文字をマッチングさせるのに使用されます。

正規表現とは、行の文字と正確に一致する通常の文字のストリングで構成され ます。またメタキャラクター と呼ばれる特殊文字を混ぜることもできます。これはある特別な方法でのマッチングを可能にします。メタキャラクターは、円記号 (¥) 文字を先行させれば、その文字自身を直接にマッチングの対象とすることができます。もし変数 magic が オフになると、2 つを除いたすべてのメタキャラクターが使用不可になります。この場合、それらのメタキャラクターとしての使用を認めるため、円記号文字が先行しなければなりません。例えば、正規表現 (regexp) を参照してください。

^
行の開始をマッチングさせます。これが式の先頭文字であれば、それはメタキャラクターだけです。
$
行の終了をマッチングさせます。これが式の最終文字であれば、それはメタキャラクターだけです。
.
単独の文字をマッチングさせます。
*
直前の式のゼロまたはそれ以上のオカレンスをマッチングさせます。
\<
ワードの開始に先行する空ストリングをマッチングさせます。ワードとは、英数字または下線文字でない文字が先行すると共に後に続く、一連の英数字または下線文字です。
\>
ワードの終了に続く空ストリングをマッチングさせます。ワードとは、英数字または下線文字でない文字が先行すると共に後に続く、一連の英数字または下線文字です。
[string]
string で定義されたクラスにある文字をマッチングさせます。例えば、[aeiouy] は母音をマッチングさせます。範囲の最初と最後の文字をハイフン (-) でつないで指定することにより、ある範囲の文字をクラスのなかに入れることができます。例えば 、ASCII で [A-Za-z] はすべての大文字 小文字をマッチングさせます。クラスの先頭文字が曲折アクセント記号 (^) であれば、そのクラスは大括弧に指定された文字以外の文字とマッチングさせます。 従って、ASCII で [a-z_][^0-9] は、数字以外の文字が続いている 1 字の英字または下線とマッチングさせます。
\( ...\)
パターンにある一連の文字は、拡張括弧で囲むことができます。置換パターンの ¥n の説明を参照してください。 これは、magic の設定値による影響はありません。
~
最後の代替コマンドの置換部分をマッチングさせます。

置換パターン

置換パターン (コマンド記述の repl で指定します) では、正規表現で一致した一連の文字の行に、何をプットバックするかを定義します。
&
一致した文字の全ストリングで置き換わります。
~
最後の代替からの全置換パターンで置き換わります。
¥n
正規表現の n 番目の ¥(...¥) に一致したストリングで置き換えられます。 次の例を考えてみてください。
s/¥([a-zA-Z]*¥)our/¥lor/
¥l は、正規表現 ¥([a-zA-Z]*¥ と一致するストリングを表します。したがって、前のコマンドは、ワード colourcolor に変えます。
¥u
置換の次の文字を英大文字に変更します。
¥l
置換の次の文字を英小文字に変更します。
¥U
置換の後続の文字を英大文字に変更します。
¥L
置換の後続の文字を英小文字に変更します。
¥E, ¥e
¥U または ¥L の効果をオフにします。

エディターの初期化

初期化コードは、1 つまたは複数の ex コマンドで構成され、 このコマンドはエディター始動時に実行されます。 初期化コードは、いくつかの方法で得られます。

  1. EXINIT という、非ヌル値を持つ環境変数が存在する場合、それは初期化コードを保持していると見なされます。 vi は 、ex source コマンドを使用してこのコードを実行します。
  2. EXINIT がない場合またはヌル値である場合は、エディターは .exrc という名前のファイルを探そうとします。HOME という環境変数がある場合は、その変数の値がホーム・ディレクトリーの名前と見なされます。 vi は 、ex source コマンドを使用して 、.exrc ファイルを実行します。
  3. EXINIT または $HOME/.exrc ファイルでオプション変数 exrc が設定され、現行ディレクトリーに .exrc というファイルが存在する場合、それは初期化コードを保持していると見なされます。 viex source コマンドを使用して実行します。

すべての .exrc ファイルは、vi コマンドを呼び出したものと同じユーザー ID によって所有され、そのユーザー ID によってのみ書き込み可能である必要があります。 .exrc ファイルに対する通常の許可は、744 です。

.exrc ファイルは、あたかも ex セッションの開始時に 入力された一連のキー・ストロークであるかのように読み取られます。したがって 、.exrc の内容は、ユーザーが vi または ex の 場合に入力する文字と同じである必要があります。特に、通常は Ctrl-V を先行させる特殊な 文字 (例えばキャリッジ・リターン) が入力に入っている場合、.exrc ファイル に Ctrl-V が必要です。.exrc ファイルを vi で作成する ときは、初期化ファイルに Ctrl-V 文字を入れるために Ctrl-V Ctrl-V と入力する必要があります。次に、特殊文字を初期化ファイルに入れるために、Ctrl-V を入力し、その後ろにその特殊文字を 入力します。.exrc ファイルは、Ctrl-V とその特殊文字の両方を 表示する必要があります。.exrc ファイルの中で指定されている コマンドは、二重引用符 (") 文字でその行を開始すれば、無視することができ ます (コメントとして扱われます)。

ファイル

vi は、以下のファイルを使用します。

/tmp
TMP_VI、TMPDIR、および TMP が定義されていない場合は、一時ファイルに使用されるディレクトリー。
/tmp/VInnnnn.mmm
一時ファイル。
.exrc
起動ファイル。

ローカライズ

vi は、以下のローカライズ環境変数を使用します。
  • LANG
  • LC_COLLATE
  • LC_ALL
  • LC_CTYPE
  • LC_MESSAGES
  • LC_SYNTAX
  • NLSPATH

詳しくは、ローカライズを参照してください。

環境変数

vi は、以下の環境変数を使用します。

_TEXT_CONV
コマンドのテキスト変換情報が含まれます。-B オプション、あるいは filecodeset または pgmcodeset オプション (-W option) のいずれかが指定されている場合、テキスト変換情報は使用されません。テキスト変換について詳しくは、z/OS UNIX シェル・コマンドのテキスト変換を制御するを参照してください。
CDPATH
検索するためのディレクトリーのリストが入っています。
COLUMNS
左右両マージンの間の列の数が入ります (オプション変数 wrapmargin を参照して ください)。水平方向の画面サイズとしても使用されます。
ENV
Korn シェル・コマンドを持っているファイルのパス名が入っていま す。sh を呼び出すと、まず最初にこのファイルが実行されます。
EXINIT
エディターの起動時に実行される vi コマンドのリストを含んでいます。
HOME
エディターの起動ファイルを探すディレクトリーを含んでいます。
LINES
画面の行数を入れます (オプション変数 windows を参照)。 これはまた、縦の画面サイズとして使用されます。
PATH
ex コマンド readwrite、および shell で 指定されたシェル・コマンドを探すディレクトリーのリストがあります。
SHELL
!string 形式のオペランドを付け た !shellreadwrite お よびその他の ex コマンドで使用されるコマンド・インタープリターの 名前を含んでいます。デフォルトでは sh ユーティリティーです。
TERM
端末タイプの名前が入っています。
TERMINFO
terminfo データベースのパス名があります。
TMPDIR
シェルが一時ファイルのディレクトリーとして使用するパス名を 含んでいます。
TMP_VI
管理者が vi の一時ファイルの位置として指定することが できるディレクトリー・パス名が入っています。これは、これらのファイルの現行のデフォルト・ディレクトリー (通常は /tmp) が TFS として実装されている場合に有用です。この場合、exrecover デーモンがリカバリーに使用する vi の 一時ファイルはすべて、システム・クラッシュの後で失われてしまいます。

この環境変数は、ユーザーがそれぞれの環境に合わせて設定するのではなく、システム管理者が設定する必要があります。ユーザーがこの環境変数を設定し、TMP_VI ディレクトリーを、exrecover が TMP_VI として認識する以外のものに設定した場合、ユーザーは exrecover デーモンを手動で実行しなければ、一時ファイルを vi

で使用されるリカバリー可能ファイル (/etc/recover/$LOGNAME にある) に変換することができなくなります。

TMP_VI を設定する際には、以下の制約事項に従います。

  1. TMP_VI を /etc/recover/$LOGNAME に設定しないでください。
  2. パス名コンポーネントが初期化プロセスの値と異なるユーザーの値を持つ環境変数 (例えば、$HOME) であるどのディレクトリーにも TMP_VI を設定しないでください。IPL 時に exrecover が実行されると、vi に接続された一時ファイルは、vi によってリカバリー可能な形式に変換されます。 exrecover は、IPL 時に出されるので、init プロセスによって所有され、特定の環境変数については (これらの環境変数が設定されていれば) 異なる値を含むことになります。ファイル・システム全体に、exrecover によってしか変換できない 一時ファイルがいくつか存在する可能性があります。この変換は、システム管理者 (すべてのユーザーが所有するファイルをリカバリーするため) または単一ユーザー (ユーザー自身が所有するファイルのみをリカバリーするため) が手動で行うことができます。

終了値

0
正常終了。
1
以下のいずれかの理由による失敗
  • コード・セットが有効ではない。
  • 自動変換をオフにできなかった。
  • 要求されたテキスト変換を実行できなかった。
  • 無効なオプション。
  • open/visual からそのようなコマンドがない。
  • lhs が欠落している。
  • ファイル名が欠落している。
  • システムがジョブ制御をサポートしていない。
  • 書き込みの形式が ww>> である。
  • 内部エラー: 正しくないシーク・ポインター。
  • 内部エラー: 行が範囲外。
  • 内部エラー: 行が長すぎる。
  • ゼロ以外のアドレスがこのコマンドに必要。
  • バッファーに行がない。
  • 元に戻すものがない。
  • visual から改行をグローバルに拡張できない。
  • グローバル・コマンドが長すぎる。
  • 引数リストが長すぎる。
  • ファイルが読み取り専用。
  • ! に替わるコマンドが前にない。
  • コマンドが長すぎる。
  • 正規表現が前にない。
  • バッファーが 1-9、a-z。
  • 行が長すぎる。
  • システムがジョブ制御をサポートしていない。
  • = のあとに数字が必要。
  • バッファーにない。
  • rhs が欠落している。
  • マクロが多すぎる。
  • 反復のマップの拡張。
  • 繰り返すものがない。
  • 最後の繰り返しコマンドが繰り返しバッファーをオーバーフロー。
  • タグが正しくない。
  • タグ・ファイルがない。
  • タグ・ファイルにそのようなタグがない。
  • 負のアドレス。先頭バッファー行が 1 である。
  • エディター・コマンドでない。
  • 非適用 ex コマンド。
  • コマンドのアドレスの数が正しくない。
  • マークに続く文字が必要。
  • マーク名が定義されていない。
  • グローバルの中のグローバルは認められない。
  • 最初のアドレスが 2 番目のアドレスを超える。
  • open オプションが設定されていなければ open/visual は使用できない。
  • 正規表現 ¥ には /? が続かなくてはならない。
  • このコマンドにアドレスは認められない。
  • 編集するファイルがすでにない。
  • 現行ファイル名がない。
  • コマンドの終わりに余計な文字がある。
  • バッファーに行が不足している。
  • メモリーが不足している。
  • 制限された環境。
  • コマンドが長すぎる。
  • 末尾アドレスが必要。
  • m および t では、出力先はソースにまたがることはできない。
  • % に替わるファイル名がない。
  • # に替わる代替ファイル名がない。
  • ファイル名が長すぎる。
  • ファイル名が多すぎる。
  • 引数バッファーのオーバーフロー。
  • 不完全なシェル・エスケープ・コマンド。
  • 正規表現は文字や数字で区切れない。
  • 前に走査する正規表現がない。
  • 繰り返す代替が前にない。
  • 改行を正規表現に拡張できない。
  • [ が欠落している。
  • 正規表現の構成が正しくない。
  • 記憶された正規表現がない。
  • 代替で行のオーバーフロー。
  • 置換パターンに ¥d が含まれている (正規表現で使用できない)。
  • 置換パターンが長すぎる。
  • 正規表現が複雑すぎる。
  • 改行を visual に拡張できない。
  • そのような設定オプションがない。
  • オプション割り当てでストリングが長すぎる。
2
  • 無効なコマンド行オプション。
  • -n オプションの num が抜けているか正しくない。

制限

  • 行の最大数: 65 279 (64 K - 256 - 1)。
  • 最長の行の長さ: {LINE_MAX} バイト (改行を含む)。
  • 最長のコマンド行: 256 バイト。
  • ファイル名の長さ: 128 バイト。
  • ストリング・オプションの長さ: 64 バイト。
  • 記憶される正規表現の長さ: 256 バイト。
  • mapmap! およ び abbreviate の項目数: それぞれ 64。
  • vi での . の キー・ストロークの保管される数: 128。
  • mapmap! また は abbreviatelhs の長さ: 10 バイト。
  • タグの名前の文字の最大数: 30。
  • vi からの : エスケープでの文字の数: 128。
  • メモリー 128K に加えて設定オプション maxbuffers K の 補助メモリーが必要。起動 中 maxbuffers は使用可能メモリーを反映するように変更 (最小 32K 必要)。
  • ネストしたソース・ファイルの数: 3。

移植性

POSIX.2 ユーザー移植性拡張X/Open 移植性ガイドUNIX システム。

-B-e-s-v、および -W オプションは、POSIX 標準の拡張です。

関連情報

edexfgjobsmsgsedtalkteewrite

regexp の詳細は、正規表現 (regexp)を 参照してください。