LinuC レベル1(LPIC-1対応)対策
viの操作
このブラウザ内の Debian には vi も vim も入っていないので、ここは打って確かめられません。それでも飛ばせないのは、vi が必出で、「このキーを押すと何が起きるか」という書式そのものが問われるからです。手元に Linux や macOS の端末があるなら、一度 vi を開いて下の表を上から押してみてください。
出題は、モードの区別、挿入モードに入るコマンドの違い、削除とコピー、保存終了の書き分けに集中します。特に :wq と :q!、dd と yy の違いは定番中の定番です。
今どのモードにいるか分からなくなります
| モード | 状態 | 入り方 |
|---|---|---|
| ノーマルモード | 起動直後。キーがコマンドとして働く | 他のモードから Esc |
| 挿入モード | 打った文字がそのまま入力される | ノーマルモードで i a o などを押す |
| コマンドラインモード | 画面下に入力欄が出る | ノーマルモードでコロンまたはスラッシュ |
vi の混乱のほとんどは、今どのモードにいるか見失うことから起きます。迷ったら Esc を2回押して戻る習慣を先に付けてください。
| キー | 挿入モードへの入り方 |
|---|---|
i | カーソルの直前から挿入 |
a | カーソルの直後から挿入 |
I | 行の先頭から挿入 |
A | 行の末尾から挿入 |
o | 下に新しい行を作って挿入 |
O | 上に新しい行を作って挿入 |
小文字と大文字が対で、大文字のほうが行単位で大きく動くと覚えると整理できます。
移動と削除とコピー
| キー | 動き |
|---|---|
h j k l | 左、下、上、右へ移動 |
0 / $ | 行頭へ / 行末へ |
w / b | 次の単語の先頭へ / 前の単語の先頭へ |
gg / G | ファイルの先頭行へ / 最終行へ |
数字を前に置くと n 行目へ移動し、10G と :10 は同じです。矢印キーが使える実装は多いのですが、試験では hjkl が問われます。
| キー | 動き |
|---|---|
x | カーソル位置の1文字を削除 |
dd | 1行を削除 |
dw | 単語1つ分を削除 |
d$ または D | カーソル位置から行末まで削除 |
yy | 1行をコピー |
yw | 単語1つ分をコピー |
p / P | カーソルの下 (直後) / 上 (直前) に貼り付け |
こちらも数字を前に置けます。3dd なら3行削除、3yy なら3行コピーです。vi の削除は切り取りを兼ねるので、dd の直後に p を押すと消した行が別の場所へ移ります。取り消しは u、取り消しの取り消しは Ctrl-r、直前の操作の繰り返しは . です。
検索と置換
| コマンド | 動き |
|---|---|
/文字列 | 前方へ検索 |
?文字列 | 後方へ検索 |
n / N | 次の候補へ / 前の候補へ |
:s/old/new/ | カーソル行の最初の1つを置換 |
:s/old/new/g | カーソル行のすべてを置換 |
:%s/old/new/g | ファイル全体のすべてを置換 |
:%s/old/new/gc | ファイル全体を1つずつ確認しながら置換 |
% がファイル全体、g が行内すべて、c が確認付きで、この3つの意味が問われます。g を付けないと各行の最初の1つしか置き換わりません。
保存と終了
| コマンド | 動き |
|---|---|
:w | 保存する |
:q | 終了する。変更があると終了できない |
:wq | 保存して終了する |
:x または ZZ | 変更があれば保存して終了する |
:q! | 変更を破棄して終了する |
:wq と :x の違いは、変更が無いときの挙動です。:wq は書き込みに行くのでタイムスタンプが更新され、:x は書き込みません。ビックリマークは強制を表す記号です。
:set number で行番号、:set ignorecase で大文字小文字を無視した検索になります。頭に no を付けると打ち消しで、:set nonumber は行番号を消します。恒久的に効かせるならホームディレクトリの .vimrc に書きます。
よくある引っかけ
:q で変更を捨てて終了できる、という選択肢は誤りです。変更があると警告が出て終了できず、捨てるには :q! が要ります。
dd がコピーで yy が削除、という逆転の選択肢も定番です。:s/old/new/ の対象はファイル全体ではなくカーソル行だけです。
なお vi のコマンドはほとんどが英単語の頭文字です。i は insert、a は append、d は delete、y は yank、p は put、w は write、q は quit。由来から辿ると忘れにくくなります。
復習ミニクイズ
vi で編集中のファイルに変更を加えたあと、その変更を保存せずにエディタを終了したいときのコマンドはどれですか。