【linux】vi

この記事は現役ウェブディベロッパーがわかりやすさにこだわって作成しました

[no_toc]
起動と終了

viの起動

viを起動するには、単純に

% vi

と入力しても構わないし、またファイル名が決まっていれば (または既に存在するファイルを開くのであれば)下記のように入力する。

% vi ファイル名

保存と終了

コマンド説明
:w保存
:w別ファイル名別名で保存
:q終了
:wq保存して終了
ZZ内容が変更されている場合は保存して終了
:開始行,終了行wqファイル名開始行から終了行までを保存して終了
:wq別ファイル名別名で保存して終了
:wq!強制終了(保存なし)

コマンドモード(移動)

viを起動直後は、コマンドモードになっていてファイル上で移動などの 処理ができる。注意すべきことは、 コマンドモードのままでは文字入力できず、 文字入力するためには入力モードへ切り替える必要がある、 ということである。

カーソル移動
以下、移動に関するコマンドを記述する。
 コマンド説明
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最終行への移動
※1: 行数を表示させるには、コマンドモードにて、

:set nu

逆に行数を表示させないためには、

:set nonu

と入力する。nu (number), nonu (no number)と覚えよう。

モード切替

コマンドモードと入力モードの切り替え

 コマンド説明
コマンドモード→入力モードiカーソルの位置に文字を入力
Iカーソルのある行頭に文字を入力
aカーソルの右側に文字を入力
Aカーソルのある行末 に文字を入力
oカーソルのある行の次の行頭 に文字を入力
Oカーソルのある行の前の行頭 に文字を入力
入力モード→コマンドモードESC 
編集コマンド

コピーと削除

 コマンド説明
コピーyl1文字 のコピー
(3文字のコピーはy3l, 3yl のどちらでも可)
yw1単語 のコピー
(3単語のコピーはy3w, 3yw のどちらでも可)
yy1行 のコピー
(3行のコピーはy3y, 3yy のどちらでも可)
y0行頭からカーソルの直前まで のコピー
y$カーソルの位置から行末まで のコピー
削除x1文字 の削除
dl1文字 の削除
(3文字の削除はd3l, 3dl のどちらでも可)
dw1単語 の削除
(3単語の削除はd3w, 3dw のどちらでも可)
dd1行 の削除
(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)
複数のファイル間でコピー、貼り付けを行いたい場合には、 名前つきバッファを使用する。 上書きしない限り、viを終了するまで 名前つきバッファの内容は保持される。
検索・置換

検索と置換

 コマンド説明
置換s1文字置換(置換後は入力モードになる)
r1文字置換(置換後はコマンドモードになる)
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[ファイル]今のファイルと、他のファイルとの差分を取るコマンド
:Tutorial30分程度のVi利用方法のチュートリアル

参考

PHP/Javascript/WORDPRESS案件全般承ります

この記事についてのご質問またはお困りのことがございましたら、お気軽にお問い合わせください。

タイトルとURLをコピーしました