Unix-vi-editor
Unix/Linux-viエディターチュートリアル
この章では、Uniでのviエディターの動作を理解します。 Unixでファイルを編集するには多くの方法があります。 画面指向のテキストエディタ vi を使用してファイルを編集するのが最良の方法の1つです。 このエディターを使用すると、ファイル内の他の行との関連で行を編集できます。
*VIM* と呼ばれるviエディターの改良バージョンも利用可能になりました。 ここで、VIMは* *Vi IM* *の略です。
viは、一般的にUnixエディターの事実上の標準と見なされます。
通常、Unixシステムのすべてのフレーバーで使用できます。
その実装は、全体的に非常に似ています。
必要なリソースはごくわずかです。
ed や ex などの他のエディターよりもユーザーフレンドリーです。
*vi* エディタを使用して、既存のファイルを編集したり、新しいファイルを最初から作成したりできます。 このエディターを使用して、テキストファイルを読み取ることもできます。
viエディターの開始
次の表は、viエディターを使用するための基本的なコマンドを示しています-
Sr.No. | Command & Description |
---|---|
1 |
vi filename まだ存在しない場合は新しいファイルを作成し、存在しない場合は既存のファイルを開きます。 |
2 |
vi -R filename 既存のファイルを読み取り専用モードで開きます。 |
3 |
view filename 既存のファイルを読み取り専用モードで開きます。 |
以下は、現在の作業ディレクトリにまだ存在しない場合に新しいファイル testfile を作成する例です-
$vi testfile
上記のコマンドは、次の出力を生成します-
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
カーソルの後の各行に*チルダ*(〜)があります。 チルダは未使用の行を表します。 行がチルダで始まっておらず、空白のように見える場合、スペース、タブ、改行、またはその他の表示できない文字が存在します。
これで、作業を開始する1つの開いているファイルがあります。 さらに先に進む前に、いくつかの重要な概念を理解しましょう。
動作モード
viエディターでの作業中、通常、次の2つのモードに遭遇します-
- コマンドモード-このモードでは、ファイルの保存、コマンドの実行、カーソルの移動、行または単語のカット(ヤンク)および貼り付け、検索および置換などの管理タスクを実行できます。 このモードでは、入力した内容はすべてコマンドとして解釈されます。
- 挿入モード-このモードでは、テキストをファイルに挿入できます。 このモードで入力されたものはすべて入力として解釈され、ファイルに配置されます。
viは常に*コマンドモード*で起動します。 テキストを入力するには、 i と入力するだけの挿入モードである必要があります。 挿入モードを終了するには、 Esc キーを押します。これにより、コマンドモードに戻ります。
ヒント-どのモードにいるかわからない場合は、Escキーを2回押します。これにより、コマンドモードに移動します。 viエディターを使用してファイルを開きます。 いくつかの文字を入力することから始めてから、違いを理解するためにコマンドモードに入ります。
viから抜け出す
viを終了するコマンドは*:q です。 コマンドモードになったら、コロンと「q」を入力し、リターンを押します。 ファイルが何らかの方法で変更された場合、エディターはこれを警告し、終了させません。 このメッセージを無視するには、保存せずにviを終了するコマンドは:q!*です。 これにより、変更を保存せずにviを終了できます。
エディターの内容を保存するコマンドは*:w です。 上記のコマンドをquitコマンドと組み合わせるか、:wq *を使用してリターンできます。
変更を保存してvi を終了する最も簡単な方法は、ZZコマンドを使用することです。 コマンドモードで、 *ZZ と入力します。 ZZ コマンドは、*:wq *コマンドと同じように機能します。
ファイルの特定の名前を指定/指定する場合は、:w *の後に指定することで指定できます。 たとえば、作業中のファイルを *filename2 という別のファイル名として保存する場合は、*:w filename2 *と入力して戻ります。
ファイル内を移動する
テキストに影響を与えずにファイル内を移動するには、コマンドモードにする必要があります(Escキーを2回押します)。 次の表は、一度に1文字を移動するために使用できるいくつかのコマンドを示しています-
Sr.No. | Command & Description |
---|---|
1 |
k カーソルを1行上に移動します |
2 |
j カーソルを1行下に移動します |
3 |
h カーソルを1文字左に移動します |
4 |
l カーソルを1文字右に移動します |
ファイル内を移動するには、次の点を考慮する必要があります-
- viでは大文字と小文字が区別されます。 コマンドを使用するときは、大文字に注意する必要があります。
- viのほとんどのコマンドの前には、アクションを発生させたい回数を指定できます。 たとえば、 2j はカーソルをカーソル位置の2行下に移動します。
viでファイル内を移動する方法は他にもたくさんあります。 コマンドモードである必要があることに注意してください(* Escを2回押す*)。 次の表は、ファイル内を移動するためのいくつかのコマンドを示しています-
以下に、ファイル内を移動するコマンドのリストを示します。
Sr.No. | Command & Description |
---|---|
1 |
0 or VERBAR カーソルを行の先頭に配置します |
2 |
$ カーソルを行末に配置します |
3 |
w 次の単語にカーソルを置きます |
4 |
b 前の単語にカーソルを置きます |
5 |
( 現在の文の先頭にカーソルを置きます |
6 |
) 次の文の先頭にカーソルを置きます |
7 |
E 空白で区切られた単語の末尾に移動します |
8 |
\{ 段落を後ろに移動します |
9 |
} 段落を前に移動します |
10 | *[[Moves a section back |
11 |
]] セクションを前方に移動します |
12 | *n |
現在の行の列 n に移動します |
13 |
1G ファイルの最初の行に移動します |
14 |
G ファイルの最終行に移動します |
15 |
nG ファイルの n ^ th ^ 行に移動します |
16 |
:n ファイルの n ^ th ^ 行に移動します |
17 |
fc
|
18 |
Fc
|
19 |
H 画面の上部に移動します |
20 |
nH 画面の上部から n ^ th ^ 行に移動します |
21 |
M 画面の中央に移動します |
22 |
L 画面の一番下に移動する |
23 |
nL 画面の下部から n ^ th ^ 行に移動します |
24 |
制御コマンド
次のコマンドは、以下の表に示す機能を実行するためにコントロールキーと一緒に使用できます-
以下に制御コマンドのリストを示します。
Sr.No. | Command & Description |
---|---|
1 |
CTRLPLUSd 1/2画面進む |
2 |
CTRLPLUSf 全画面を1つ進めます |
3 |
CTRLPLUSu 半画面前に移動します |
4 |
CTRLPLUSb 1画面前に移動します |
5 |
CTRLPLUSe 画面を1行上に移動します |
6 |
CTRLPLUSy 画面を1行下に移動します |
7 |
CTRLPLUSu 画面を1/2ページ上に移動します |
8 |
CTRLPLUSd 画面を1/2ページ下に移動します |
9 |
CTRLPLUSb 画面を1ページ上に移動します |
10 |
CTRLPLUSf 画面を1ページ下に移動します |
11 |
CTRLPLUSI 画面を再描画します |
ファイルを編集する
ファイルを編集するには、挿入モードである必要があります。 コマンドモードから挿入モードに入るための多くの方法があります-
Sr.No. | Command & Description |
---|---|
1 |
i 現在のカーソル位置の前にテキストを挿入します |
2 |
I 現在の行の先頭にテキストを挿入します |
3 |
a 現在のカーソル位置の後にテキストを挿入します |
4 |
A 現在の行の末尾にテキストを挿入します |
5 |
o カーソル位置の下にテキスト入力用の新しい行を作成します |
6 |
O カーソル位置の上にテキスト入力用の新しい行を作成します |
キャラクターを削除する
開いているファイルの文字と行を削除するために使用できる重要なコマンドのリストは次のとおりです-
Sr.No. | Command & Description |
---|---|
1 |
x カーソル位置の下の文字を削除します |
2 |
X カーソル位置の前の文字を削除します |
3 |
dw 現在のカーソル位置から次の単語まで削除します |
4 |
d^ 現在のカーソル位置から行の先頭までを削除します |
5 |
d$ 現在のカーソル位置から行末までを削除します |
6 |
D カーソル位置から現在の行の末尾までを削除します |
7 |
dd カーソルがある行を削除します |
上記のように、viのほとんどのコマンドは、アクションを発生させたい回数によって前置できます。 たとえば、 2x はカーソル位置の下の2文字を削除し、 2dd はカーソルが置かれている2行を削除します。
さらに先に進む前に、コマンドを実行することをお勧めします。
変更コマンド
viの文字、単語、または行を削除せずに変更することもできます。 関連するコマンドは次のとおりです-
Sr.No. | Command & Description |
---|---|
1 |
cc 行の内容を削除し、挿入モードのままにします。 |
2 |
cw カーソルが置かれている単語をカーソルから単語の小文字の w 末尾に変更します。 |
3 |
r カーソルの下の文字を置き換えます。 置換が入力されると、viはコマンドモードに戻ります。 |
4 |
R 現在カーソルの下にある文字で始まる複数の文字を上書きします。 上書きを停止するには、 Esc を使用する必要があります。 |
5 |
s 現在の文字を入力した文字に置き換えます。 その後、挿入モードのままになります。 |
6 |
S カーソルが置かれている行を削除し、新しいテキストに置き換えます。 新しいテキストが入力された後、viは挿入モードのままになります。 |
コマンドのコピーと貼り付け
あなたは1つの場所から行または単語をコピーしてから、次のコマンドを使用して別の場所に貼り付けることができます-
Sr.No. | Command & Description |
---|---|
1 |
yy 現在の行をコピーします。 |
2 |
yw 小文字のwカーソルが置かれている文字から、単語の最後まで現在の単語をコピーします。 |
3 |
p コピーしたテキストをカーソルの後に配置します。 |
4 |
P カーソルの前にヤンクしたテキストを置きます。 |
高度なコマンド
日々の編集を簡素化し、viのより効率的な使用を可能にするいくつかの高度なコマンドがあります-
高度なコマンドのリストを以下に示します。
Sr.No. | Command & Description |
---|---|
1 |
J 現在の行を次の行と結合します。 j個のコマンドが多数の行を結合します。 |
2 |
<< 現在の行を1シフト幅左にシフトします。 |
3 |
>> 現在の行を1シフト幅だけ右にシフトします。 |
4 |
~ カーソルの下の文字の大文字と小文字を切り替えます。 |
5 |
^G CtrlキーとGキーを同時に押して、現在のファイル名とステータスを表示します。 |
6 |
U 現在の行を、カーソルが行に入る前の状態に戻します。 |
7 |
u これは、ファイルで行われた最後の変更を元に戻すのに役立ちます。 もう一度「u」と入力すると、変更が再実行されます。 |
8 |
J 現在の行を次の行と結合します。 カウントはその数の行を結合します。 |
9 |
:f ファイル内の現在の位置を%で表示し、ファイル名、ファイルの総数を表示します。 |
10 |
:f filename 現在のファイルの名前をfilenameに変更します。 |
11 |
:w filename ファイルfilenameに書き込みます。 |
12 |
:e filename ファイル名を持つ別のファイルを開きます。 |
13 |
:cd dirname 現在の作業ディレクトリをdirnameに変更します。 |
14 |
:e # 2つの開いているファイルを切り替えます。 |
15 |
:n viを使用して複数のファイルを開く場合は、*:n *を使用してシリーズの次のファイルに移動します。 |
16 |
:p viを使用して複数のファイルを開く場合は、*:p *を使用して、シリーズの前のファイルに移動します。 |
17 |
:N viを使用して複数のファイルを開く場合は、*:N *を使用して、シリーズの前のファイルに移動します。 |
18 |
:r file ファイルを読み取り、現在の行の後に挿入します。 |
19 |
:nr file ファイルを読み取り、 n 行の後に挿入します。 |
単語と文字の検索
viエディターには、 string と character の2種類の検索があります。 文字列検索では、 / および*?*コマンドが使用されます。 これらのコマンドを開始すると、入力したばかりのコマンドが画面の最後の行に表示され、検索する特定の文字列を入力します。
これらの2つのコマンドは、検索が行われる方向のみが異なります-
/ コマンドは、ファイル内を前方(下方)に検索します。
*?*コマンドは、ファイル内を逆方向(上方向)に検索します。
*n* および *N* コマンドは、前の検索コマンドをそれぞれ同じ方向または反対方向に繰り返します。 一部の文字には特別な意味があります。 これらの文字の前にバックスラッシュ( *\* )を付けて、検索式の一部として含める必要があります。
Sr.No. | Character &Description |
---|---|
1 |
^ 行の先頭で検索します(検索式の先頭で使用)。 |
2 |
. 単一の文字に一致します。 |
3 | 0個以上の前の文字と一致します。 |
4 |
$ 行末(検索式の最後で使用)。 |
5 |
[ 一致する式または一致しない式のセットを開始します。 |
6 |
< これは、バックスラッシュでエスケープされた式に入れられ、単語の末尾または先頭を見つけます。 |
7 |
> これにより、上記の「* <*」文字の説明を確認できます。 |
文字検索は、コマンドの後に入力された文字を見つけるために1行内で検索します。 f および F コマンドは、現在の行の文字のみを検索します。 f は前方を検索し、 F は後方を検索し、見つかった文字の位置にカーソルが移動します。
*t* および *T* コマンドは現在の行の文字のみを検索しますが、 *t* の場合、カーソルは文字の前の位置に移動し、 *T* は行を後方の文字の位置まで検索します。
設定コマンド
次の*:set コマンドを使用して、vi画面の外観を変更できます。 コマンドモードに入ったら、:set *に続けて次のコマンドを入力します。
Sr.No. | Command & Description |
---|---|
1 |
:set ic 検索時に大文字と小文字を区別しません |
2 |
:set ai 自動インデントを設定します |
3 |
:set noai 自動インデントを解除します |
4 |
:set nu 左側に行番号を持つ行を表示します |
5 |
:set sw ソフトウェアのタブストップの幅を設定します。 たとえば、このコマンドでシフト幅を4に設定します— *:set sw = 4 * |
6 |
_wrapscan_が設定されていて、ファイルの下部に単語が見つからない場合、最初から検索を試みます |
7 |
:set wm このオプションの値がゼロより大きい場合、エディターは自動的に「ワードラップ」します。 たとえば、折り返しマージンを2文字に設定するには、次のように入力します。*:set wm = 2 * |
8 |
ファイルの種類を「読み取り専用」に変更します |
9 |
:set term 端末タイプを印刷します |
10 |
:set bf 入力から制御文字を破棄します |
コマンドを実行する
viには、エディター内からコマンドを実行する機能があります。 コマンドを実行するには、コマンドモードに移動して*:!*コマンドを入力するだけです。
たとえば、そのファイル名でファイルを保存する前にファイルが存在するかどうかを確認する場合は、 :!と入力できます。 ls とすると、 ls の出力が画面に表示されます。
任意のキー(またはコマンドのエスケープシーケンス)を押して、viセッションに戻ることができます。
テキストを置き換える
置換コマンド(:s/)を使用すると、ファイル内の単語または単語のグループをすばやく置き換えることができます。 以下は、テキストを置き換える構文です-
:s/search/replace/g
*g* はグローバルを表します。 このコマンドの結果、カーソルの行にあるすべてのオカレンスが変更されます。
注意すべき重要なポイント
次のポイントは、viでの成功に追加されます-
- コマンドを使用するには、コマンドモードである必要があります。 (コマンドモードになっていることを確認するために、いつでもEscを2回押します。)
- コマンドには注意が必要です。 これらは大文字と小文字が区別されます。
- テキストを入力するには、挿入モードである必要があります。