vi は、すべての UNIX システムで提供されるスクリーン エディタで、ファイルを編集できるウィンドウ デバイスを提供します。もちろん、UNIX システムについて少し知っている人にとっては、多かれ少なかれ、vi は非常に使いにくいと感じるでしょう。しかし、vi は最も基本的なエディタなので、読者がそれをよく学び、UNIX の世界で間違いなくそれを使用できることを願っています。他のいくつかのテキスト プロセッサは UNIX に標準装備されていないため、将来的には妨げがなく快適です。他の人の Linux マシンには joe または pico がインストールされていない可能性があります。vi を知らない場合は、実行できない可能性があります。
viの基本概念
基本的にviはコマンドモード、挿入モード、最終行モードの3つの動作状態に分けられます
各モードの機能の区別は以下の通りです:
1. コマンドモード: の動きを制御します。画面カーソル、文字やカーソルの削除、セクションの移動とコピー、挿入モードへの移行、または最終行モードへの移行。
2. 挿入モード: 挿入モードでのみ、Esc キーを押してコマンド モードに戻ります。
3. 最終行モード: ファイルを保存するか、エディタを終了します。文字列の検索や行番号のリストなど、編集環境を設定することもできます。
しかし、vi は 2 つのモードに簡略化できます。つまり、Last line モードもコマンド モードに含まれ、vi はコマンド モードと挿入モードに分かれます。
viを入力するコマンド
vi filename: ファイルを開くか新しいファイルを作成し、最初の行の先頭にカーソルを置きます
vi +n filename: ファイルを開き、n行目の先頭にカーソルを置きます
vi + ファイル名: ファイルを開き、最後の行の先頭にカーソルを置きます
vi +/パターン ファイル名: ファイルを開き、パターンに一致する最初の文字列にカーソルを置きます
vi -r ファイル名: 編集中にシステムがクラッシュしました前回の vi でファイル名を復元します
vi ファイル名....ファイル名: 複数のファイルを開いて順番に編集します
カーソルを移動するコマンド
h: カーソルを 1 文字左に移動します
l: カーソルを 1 文字移動します右
space: カーソルを 1 文字右に移動します
Backspace: カーソルを 1 文字左に移動します
k または Ctrl+p: カーソルを 1 行上に移動します
j または Ctrl+n: カーソルを 1 行下に移動します
Enter: カーソルを 1 行下に移動します
w または W: カーソルを 1 文字右の先頭に移動します
b または B: カーソルを 1 単語左の単語の先頭に移動します
e または E:カーソルを 1 単語右の単語の末尾に移動します
): カーソルを文の末尾に移動します
(: カーソルを文の先頭に移動します
}: カーソルを段落の先頭に移動します
{ : カーソルが段落の最後に移動します
nG: カーソルが n 行目の先頭に移動します
n+: カーソルが下に n 行移動します
n-: カーソルが上に n 行移動します
n$: カーソルが段落の先頭に移動しますn 行目の終わり
H: カーソルが画面の先頭行に移動します
M: カーソルが画面の中央の行に移動します
L: カーソルが画面の最後の行に移動します
0: (数字に注意してください)ゼロ) カーソルが現在の行の先頭に移動します
$: カーソルが現在の行の末尾に移動します
画面スクロール クラスコマンド
Ctrl+u: ファイルの先頭まで半画面スクロールします
Ctrl+d : ファイルの最後に向かって半画面スクロールします
Ctrl+f: ファイルの最後に向かって 1 画面スクロールします
Ctrl+b; ファイルの先頭に向かって 1 画面スクロールします
nz: n 番目の行に移動しますn が指定されていない場合は、現在の行が画面の一番上にスクロールされます。
i: カーソルの前にテキスト コマンドを挿入します。
I: 現在の行の先頭に
a: を挿入します。カーソル
A: 現在の行の末尾 o: 現在の行の下に新しい行を開きます
O: 現在の行の上に新しい行を開きます
r: 現在の文字を置き換えます
R: 現在の文字と文字を置き換えますその後、ESC キーが押されるまで
s: 現在のカーソル位置から を開始して、指定した数の文字を入力したテキストに置き換えます
S: 指定した行数を削除し、入力したテキストに置き換えます
ncw または nCW:指定された文字数を変更します
nCC: 指定された行数を変更します
削除コマンド
ndwまたはndW: カーソルから始まりそれに続くn-1文字を削除します
do: 行の先頭まで削除します
d$ : 行末まで削除
ndd: 現在行とその後の n-1 行を削除
x または X : 文字を削除、x はカーソル以降の文字を削除、?pattern: パターンの先頭から検索カーソルをファイルの先頭に移動します
n: 最後の検索コマンドを同じ方向に繰り返します
N: 最後の検索コマンドを反対方向に繰り返します
: s/p1/p2/g: 現在の行のすべての p1 を検索します 置換すべてを p2 に置き換えます
: n1,n2s/p1/p2/g: n1 ~ n2 行のすべての p1 を p2 に置き換えます
: g/p1/s//p2/g: ファイル内のすべての p1 を p2 に置き換えます 置換
オプション設定
all: すべてのオプション設定をリストします
term: 端末の種類を設定します
ignorance: 検索時に大文字と小文字を無視します
list: タブストップ (Ctrl+I) と行末フラグ ($) を表示します
number : 行番号を表示します
report: 行指向のコマンドによって変更された数値を表示します
terse: 短い警告メッセージを表示します
warn: 別のファイルに切り替えるときに現在のファイルが保存されない場合、NO write メッセージが表示されます。
nomagic: 検索モードの前に「" のない特殊文字の使用を許可します。
nowrapscan: vi による検索を禁止します。ファイルの両端からもう一度開始します
mesg: write を使用して他のユーザーが自分の端末に書き込んだ情報を vi が表示できるようにします
最後の行コマンド
: n1, n2 co n3: n1 行から n2 行までの内容をコピーしますn2 から n3 次の行
: n1, n2 m n3: n1 行目から n2 行目の内容を n3 行目の最後に移動
: n1, n2 d: n1 行目から n2 行目の内容を削除
: w: 現在のファイルを保存
: e filename: ファイル filename を編集のために開きます
: x: 現在のファイルを保存して終了します
: q: vi を終了します
: q!: ファイルを保存せずに vi を終了します
: !command: シェルコマンドコマンドを実行します
: n1 ,n2 w!command: ファイルの n1 ~ n2 行の内容をコマンドの入力として使用し、実行します。 n1、n2 が指定されていない場合、ファイルの内容全体がコマンドの入力として使用されることを意味します。コマンド
: r!command: コマンド command を使用します 出力結果が現在の行に入れられます
レジスタ操作
"?nyy: 現在の行と次の n 行の内容を register? に保存します。ここで、? は文字、n は数字
"?nyw: 現在の行と次の n 行をレジスタに保存しますか? 次の n ワードをレジスタに保存しますか? 、? は文字、n は数字
"?nyl: 現在の行と次の n 文字をレジスターに保存します。ここで、? は文字、n は数字です
"?p: レジスターを取り出します?そしてカーソルの位置に置きます。ここ?文字でも数字でも構いません
ndd: 現在行とその下 n 行のテキストを削除し、削除した内容を削除レジスタ 1 番に入れます。
VIの使用法
------------------------------------------ ---------- ------------------------------------
1. テキストを挿入します
┌ ──┬─── ─────┐
│コマンド│説明│
├─┼──────┤
│i │現在の文字の前にテキストを挿入│
§──┼───────┤
│I │行頭にテキストを挿入│
§──┼───────┤
│ a │現在の文字の後に追加 テキスト│
§──┼───────┤
│A │行末にテキストを追加│
§──┼───── ──────┤
│o │現在行の後に空行を挿入する│
til──┼───────┤
│O │前に空行を挿入現在の行│
§──┼────────────┤
│R │書き換えモードでテキストを入力 │
└──┴──────┘
2. カーソルの移動
┌─────┬── ─────┐
│コマンド│説明│
§────┼───── ┤
│j または下矢印 │1 行下に移動│
├───┼─────┤
│k または上矢印 │1 行上に移動│
─── ──┼─────┤
│h または左矢印│左に 1 文字移動│
§─────┼─────┤
│ l または右矢印│右に一文字移動│
§───── ┼─────┤
│w │右に一文字移動│
§─────┼─ ──────┤
│W │右に 1 単語移動 スペース区切りの単語 │
§────┼─────┤
│b │右に 1 単語移動左│
§─────┼─────┤
│B │スペースで区切られた単語を 1 つ左に移動│
§─────┼───── ──────┤
│0 │行頭に移動│
│Ctrl- F │ページ送り│
├─────┼─────┤
│Ctrl -B │ページ逆送り│
§──────┼──── ──────┤
│nG │n行目へ│
§──────┼────── ────┤
│G │最終行へ│
└─── ──┴─────┘
3. テキストを置換します
┌─────┬─── ────┐
│コマンド│説明│
§────┼─────┤
│$ │行末へ│
§────┼─────┤
│( │文末へ 始まり│
§─────┼─────┤
│) │文末へ │
§─────┼─────┤
│ { │段落の先頭へ│
§─────┼─────┤
│} │段落の最後へ│
└────┴─────┘
4. テキストを削除します
┌─── ┬───────┐
│コマンド│説明│
§───┼─────┤
│r │1文字置換│
§─── ┼─────┤
│c │Escを押すまでテキストを変更します │
§───┼─── ────┤
│cw │次の単語を修正│
├──┼─────┤
│cnw │次のn単語を修正│
└───┴─── ─────┘
5. テキスト編集
┌──┬─────────┐
│Mingsi│説明│
§── ┼───── ───────┤
│yy │テキスト行をデフォルトのバッファに移動する│
├─┼─── ──── ──────┤
│yn │次の単語をデフォルトのバッファに移動する│
§──┼─────── ─ ────┤
│ynw │次の n ワードをデフォルトのバッファに移動│
§──┼─────────── ┤
│p │デフォルトのバッファにテキスト行が含まれている場合は、現在の │
│ │ 行の後に空の行を挿入し、それが存在しない場合はデフォルトのバッファ内の音声コンテンツをこの行に貼り付けます。地方バッファには │
│ │複数の単語が含まれています。これらの単語をカーソルの右側に貼り付けます。 │
§──┼─────────────┤
│P │デフォルトのバッファにテキスト行が含まれている場合は、現在のバッファ │
│ │ 行の前に空の行を挿入し、デフォルトのバッファーの内容をこの行に貼り付けます。デフォルトのバッファーに複数の単語が含まれている場合は、これらの単語をカーソルの左側に貼り付けます
│
└─┴──── ───────┘
6. 保存して終了
┌───────┬─ ────── ──┐
│コマンド│説明│
§─────┼───────── ┤
│zz │保存して終了│
§─ ──────┼─────────┤
│:w ファイル名 │書き込みファイル│
§────── ────┼─────────┤
│:W │ファイルの書き込み│
§─────┼────── ─────┤
│:x │保存(現在のファイルが変更されている場合)して終了│
§───────┼── ──── ─────┤
│:q! │ファイルを保存せずに直接終了│
----------------------------┼───── ──┤
│:q │Exit vi │
VI 共通スキル
VI コマンドは、Unix/Linux の世界でファイルを編集するために最も一般的に使用されるコマンドと言えますが、コマンド セットが多数あるため、多くの実際、基本的なコマンドをマスターするだけで、その利点がわかり、徐々にこの方法を使いたくなるでしょう。この記事は、VI の最も一般的に使用されるコマンドと高度なアプリケーション テクニックのいくつかを紹介することを目的としています。
1. 基本コマンドの紹介
---- 1.カーソルコマンド
k、j、h、l - 上下左右のカーソル移動コマンド。 Linux ではキーボードの右側にある 4 つのカーソル キーを使用できますが、これら 4 つのコマンドを覚えておくと非常に役立ちます。これら 4 つのキーは、キーボード上の右手の基本的な位置です。
nG——ジャンプコマンド。 n は行数です。このコマンドは、カーソルを指定された行に即座にジャンプします。
Ctrl+G - カーソル位置の行数と列数をレポートします。
w、b - カーソルを前後に 1 単語スキップします。
----2.コマンドの編集
i、a、r - カーソルの前後および位置に文字コマンドを挿入します (i=挿入、a=追加、r=置換)。
cw、dw - カーソル位置の単語を変更 (置換)/削除するコマンド (c=変更、d=削除)。
x、d$、dd - 1 文字を削除するコマンド、カーソルから行末までのすべての文字を削除するコマンド、および行全体を削除するコマンド。
----3.検索コマンド
----/string, ?string---カーソル位置から後方または前方に対応する文字列を検索するコマンド。
----4.コピー コマンド
---- yy, p - 行をクリップボードにコピーするか、クリップボードの内容を削除するコマンド。
2. よくある質問と申請のヒント
---- 1.新しいファイルの /etc/passwd の内容を読み取り、ユーザー名の部分を抽出します。
---- vi ファイル
---- :r /etc/passwd 開いているファイルファイルのカーソル位置にある /etc/passwd を読み込みます
---- :%s/:.*//g 削除 / すべてetc/passwd 内のユーザー名の後のコロンから始まり行末までの部分。
---- 指定した行番号以降のファイルの内容を読み取ることもできます。たとえば、コマンド「:3r /etc/passwd」を使用して、新しいファイルの 3 行目から始まる /etc/passwd のすべての内容を読み取ります。ファイル。
---- 次の方法を使用して、ファイル内の # で始まるすべての空白行とコメント行を削除することもできます。
---- #cat squid.conf.default | grep -v ^$ | grep -v ^#
---- 2.編集するためにファイルを開いた後、ログインしたユーザーにファイルへの書き込み権限がないため、変更を一時ファイルに保存する必要があることがわかりました。
---- vi ファイル
---- :w /tmp/1 加えた変更をすべて保存します。変更の一部を一時ファイルに保存することもできます (たとえば、20 行目から 59 行目の内容だけ)。ファイル /tmp/1 では、次のコマンドを入力できます。
---- vi ファイル
---- :20,59w /tmp/1
---- 3. VI を使用してファイルを編集しますが、コンテンツの大部分を削除する必要があります。
---- まず、編集コマンド「vi ファイル」を使用してファイルを開き、削除する必要がある行にカーソルを移動し、Ctrl+G を押して行番号を表示し、最後に Ctrl+G を押します。ファイルの末尾の行番号を表示します。
---- :23,1045d 2 回取得した行番号が 23 と 1045 であると仮定し、この期間内のすべての内容を削除します。また、ma および mb コマンドを使用して、削除する開始行と終了行をマークすることもできます。その後、「:a,bd」コマンドを使用して削除します。
---- 4.ファイル全体または一部の行の各行の先頭または末尾に文字列を追加します。
---- vi ファイル
---- :3,$s/^/some string / ファイルの最初の行の先頭から最終行までに「何らかの文字列」を挿入します。
---- :%s/$/some string/g ファイル全体の各行の最後に「some string」を追加します。
---- :%s/string1/string2/g ファイル全体の「string1」を「string2」に置き換えます。
---- :3,7s/string1/string2/ ファイルの3~7行目の「string1」のみを「string2」に置き換えます。
---- 注: s は置換を表し、% はすべての行を表し、g はグローバルを表します。
----5. 2 つのファイルを同時に編集し、一方のファイルからテキストをコピーして、もう一方のファイルに貼り付けます。
---- vi file1 file2
---- yy ファイル 1 のカーソルの行をコピー
---- :n ファイル 2 に切り替えます (n=next)
---- p ファイル 2 のカーソルコピーした行を
---- :n の場所に貼り付けます。 ファイル 1 に戻ります
---- 6.ファイル内のパスを置き換えます。
---- コマンド「:%s#/usr/bin#/bin#g」を使用して、ファイル内のすべてのパス /usr/bin を /bin に置き換えます。コマンド「:%s//usr/bin//bin/g」を使用することもできます。ここで、「」はエスケープ文字であり、次の「/」文字が区切り文字ではなく実際の意味を持つ文字であることを示します。