この記事は現役ウェブディベロッパーがわかりやすさにこだわって作成しました
起動と終了
viの起動
viを起動するには、単純に
% vi
と入力しても構わないし、またファイル名が決まっていれば (または既に存在するファイルを開くのであれば)下記のように入力する。
% vi ファイル名
保存と終了
コマンド | 説明 |
---|---|
:w | 保存 |
:w別ファイル名 | 別名で保存 |
:q | 終了 |
:wq | 保存して終了 |
ZZ | 内容が変更されている場合は保存して終了 |
:開始行,終了行wqファイル名 | 開始行から終了行までを保存して終了 |
:wq別ファイル名 | 別名で保存して終了 |
:wq! | 強制終了(保存なし) |
コマンドモード(移動)
viを起動直後は、コマンドモードになっていてファイル上で移動などの 処理ができる。注意すべきことは、 コマンドモードのままでは文字入力できず、 文字入力するためには入力モードへ切り替える必要がある、 ということである。
カーソル移動
以下、移動に関するコマンドを記述する。
※1: 行数を表示させるには、コマンドモードにて、
コマンド | 説明 | |
---|---|---|
1文字の移動 | h | 左 |
j | 下 | |
k | 上 | |
l | 右 | |
1単語の移動 | w | 次の単語の先頭 (word) |
b | 現在または前の単語の先頭 | |
e | 現在または次の単語の末尾 | |
文字、単語の移動には、数字を組合わせる事で、一気に 移動できる。例えば、 「5w」 と入力すると、5つ先の単語の先頭に移動する | ||
行での移動 | 0 | 行頭 |
^ | 行の最初の文字(スペースは除く) | |
$ | 行末 | |
半画面分の移動 | CTRL+d | ↓ (down) |
CTRL+u | ↑ (up) | |
1画面分の移動 | CTRL+f | (forward) |
CTRL+b | (backward) | |
特定の行への移動 | 行数G | 指定した行への移動※1 (例えば「10G」と入力すると、10行目へ移動) (ファイルの先頭へ移動するには「1G」と入力) |
G | 最終行への移動 |
:set nu
逆に行数を表示させないためには、
:set nonu
と入力する。nu (number), nonu (no number)と覚えよう。
モード切替
コマンドモードと入力モードの切り替え
コマンド | 説明 | |
---|---|---|
コマンドモード→入力モード | i | カーソルの位置に文字を入力 |
I | カーソルのある行頭に文字を入力 | |
a | カーソルの右側に文字を入力 | |
A | カーソルのある行末 に文字を入力 | |
o | カーソルのある行の次の行頭 に文字を入力 | |
O | カーソルのある行の前の行頭 に文字を入力 | |
入力モード→コマンドモード | ESC |
編集コマンド
コピーと削除
コマンド | 説明 | |
---|---|---|
コピー | yl | 1文字 のコピー (3文字のコピーはy3l, 3yl のどちらでも可) |
yw | 1単語 のコピー (3単語のコピーはy3w, 3yw のどちらでも可) | |
yy | 1行 のコピー (3行のコピーはy3y, 3yy のどちらでも可) | |
y0 | 行頭からカーソルの直前まで のコピー | |
y$ | カーソルの位置から行末まで のコピー | |
削除 | x | 1文字 の削除 |
dl | 1文字 の削除 (3文字の削除はd3l, 3dl のどちらでも可) | |
dw | 1単語 の削除 (3単語の削除はd3w, 3dw のどちらでも可) | |
dd | 1行 の削除 (3行の削除はd3d, 3dd のどちらでも可) | |
d0 | 行頭からカーソルの直前まで の削除 | |
d$ | カーソルの位置から行末まで の削除 | |
貼り付け | p | カーソル の右側に貼り付け |
P | カーソル の左側に貼り付け | |
その他 | U | 直前のコマンドを取り消す。UNDO |
CTRL+r | 直前の取り消しを取り消す。REDO |
例えば、3行分のコピーをaという名前のバッファに保存するには、
“a3yy
のように行う。コピーでも削除でも基本は同じであり、 名前つきバッファは、a~zの26個使用できる。 名前つきバッファに保存した内容を貼り付けるには、上記の例では、
“ap
のように行う。pでもPでもどちらでも使える。
ファイルをまたがるコマンド
複数ファイル間でのコマンド
複数のファイルを開くには、下記のように、viの後にファイル名を 記述する。
% vi ファイル1 ファイル2 … ファイルn
ファイル間を移動するには、コマンドモードで以下のようなコマンドを行う。
コマンド | 説明 | |
---|---|---|
ファイル間の移動 | :n | ファイルn → n+1(次のファイルへ移動: next) |
:rew | 最後のファイル → 先頭のファイル(rewind) |
検索・置換
検索と置換
コマンド | 説明 | |
---|---|---|
置換 | s | 1文字置換(置換後は入力モードになる) |
r | 1文字置換(置換後はコマンドモードになる) | |
R | 上書き(入力をやめるまで上書きで置換される) | |
cw | カーソルの位置から単語の終わりまで置換 |
コマンド | 説明 | |
---|---|---|
検索 (同一行) | f1文字 | 文字 を検索(右方向へ) |
F1文字 | 文字 を検索(左方向へ) | |
; | 次の検索 | |
検索 (ファイル全体) | /検索文字列 | キーワードを検索(下方向へ) |
?検索文字列 | キーワードを検索(上方向へ) | |
n | 次の検索 | |
N | 前の検索 | |
置換 | :s/検索文字列/置換索文字列/ | 文字列Aを文字列Bに置換 (カーソルのある行で、最初に合致するパターンのみ置換) |
:s/検索文字列/置換索文字列/g | 文字列Aを文字列Bに置換 (カーソルのある行で、合致するパターン全てを置換) | |
:s/検索文字列/置換索文字列/c | 文字列Aを文字列Bに置換 (カーソルのある行で、最初に合致するパターンのみ置換 (置換前に確認:yで置換、nで置換なし) | |
:%s/検索文字列/置換索文字列/g | 文字列Aを文字列Bに置換 (全ての行で、合致するパターン全てを置換) | |
:10,50s/検索文字列/置換索文字列/g | 文字列Aを文字列Bに置換 (10行目から50行目までの間で、合致するパターン全てを置換) | |
:10,$s/検索文字列/置換索文字列/g | 文字列Aを文字列Bに置換 (10行目から最終行までの間で、合致するパターン全てを置換) |
その他
その他
コマンド | 説明 |
---|---|
U | 取り消し(Undo) |
J | 行の連結(カーソルのある行へ、下の行が連結) |
:setnumber | 行番号を表示 |
:setnonumber | 行番号の表示をやめる |
:setshowmode | 現在のモードを表示 |
:setshowmatch | () や {} の対応を報告 |
:setignorecase | 大文字/小文字の区別なく検索 |
:setautoindent | 自動インデントモード |
:setnoautoindent | 自動インデントモードをやめる |
:setall | すべてのオプションを表示 |
:e[ファイル] | ファイルを開く |
:syntaxon | キーワードをハイライト表示する |
:vertdiffsplit[ファイル] | 今のファイルと、他のファイルとの差分を取るコマンド |
:Tutorial | 30分程度のVi利用方法のチュートリアル |
参考
- viコマンド(vimコマンド)一覧(検索・置換) pl_kyoさんviコマンド(vimコマンド)一覧(検索・置換)「vi」は、UNIX/Linux ユーザなら一度は聞く「emacs(mule)」に並ぶ主要なエディタです。 またviエディタを基にしuguisu.skr.jp
- viの使い方/基本操作(空間情報学講座 – 京都大学viの使い方/基本操作www.gi.ce.t.kyoto-u.ac.jp
この記事についてのご質問またはお困りのことがございましたら、お気軽にお問い合わせください。