起動
基本
$ vi ファイル名 ...指定して起動
$ vi ファイル名1 ファイル名2 … ファイル名n ...複数ファイル起動
$ vi -R ファイル名 or $ view ファイル名 ...読み込み専用で起動
初期表示位置を指定して起動
$ vi + ファイル名 ...最後の行から表示
$ vi +行数 ファイル名 ...指定行から表示
$ vi +/文字列 ファイル名 ...文字列が最初に見つかった場所から表示
その他
$ vi -r ファイル名 ...壊れたファイルをリカバリする
カーソル移動
1文字移動
[←] or [h] or [BackSpace]
[→] or [l] or [Space]
[↑] or [k] or [Ctrl]+[p]
[↓] or [j] or [Ctrl]+[n]
数字指定移動
数字[←] or 数字[h] or 数字[BackSpace]
数字[→] or 数字[l] or 数字[Space]
数字[↑] or 数字[k] or 数字[Ctrl]+[p]
数字[↓] or 数字[j] or 数字[Ctrl]+[n]
行移動
[^] ...現在行の先頭位置へ
[$] ...現在行の末端位置へ
[G] ...最終行の先頭位置へ
[-] ...前行の先頭位置へ
[Enter] ...次行の先頭位置へ
:数字 ...指定行へ
移動
[w] ...1語次へ
[b] ...1語前へ
[e] ...単語末尾へ
画面スクロール
画面移動
[H] ...画面先頭へ(H: Header の意味)
[M] ...画面中央へ(M: Middle の意味)
[L] ...画面最終行へ(L: Lower の意味)
1画面分
[Ctrl]+[f] … (f: Forward の意味)
[Ctrl]+[b] … (b: Back の意味)
半画面分
[Ctrl]+[d] … (d: Down の意味)
[Ctrl]+[u] … (u: Up の意味)
終了
終了
:q ...書込みを行わず終了(quit の意味)
:q! ...書込みを行わず強制終了
:wq ...書込み後終了
:wq! ...書込み後強制終了
ファイル操作
書込み (上書き)
:w ...書込み保存(w: write の意味)
:w! ...強制書込み
:w ファイル名 ...別名で書込み
:w! ファイル名 ...別名で強制書込み
:数字,数字 w ...n行目からn行目までを保存
複数ファイルを編集中に
:n ...次のファイルの編集に移る(n: next の意味)
:n! ...次のファイルの編集に強制的に移る
:rew ...先頭のファイルに移る
:arg ...現在何番目のファイルを編集中かを確認
:args ...編集中ファイルの一覧を確認
:rewind ..現在のファイルの変更内容を保存して、リストの最初から編集をやり直す
:rewind! ...現在のファイルの変更内容を保存しないで、リストの最初から編集をやり直す
:e# ...直前の編集ファイルに戻る
読み込み
:e ...現在開いているファイルを再度読込み(e: edit の意味)
:e! ...現在開いているファイルを再度強制読込み
:e ファイル名 ...ファイルを編集用に読込み
:e! ファイル名 ...ファイルを編集用に強制読込み
編集
開始
[a] ...カーソルの右から入力開始(a: Add の意味)
[A] ...行末から入力開始
[i] ...カーソルの左から入力開始(i: Insert の意味)
[I] ...行頭から入力開始
[o] ...現在の行の下に1行挿入し、その行頭から入力開始
[O] ...現在の行の上に1行挿入し、その行頭から入力開始
*入力モードに入る前に入力済みの文字が挿入される
挿入
:r ...現在行の直下に現在のファイルの内容を挿入(r: read の意味)
:r ファイル名 ...現在行の直下に別ファイルの内容を挿入
:r! コマンド ...現在位置の直後にシェルコマンドの結果を挿入(ex: !!hogehoge)
削除
削除
[x] ...カーソルの文字を1文字削除
数字[x] ...カーソルから後ろに指定数分削除
[X] ...カーソル直前の文字を1文字削除
数字[X] ...カーソル直前の文字を指定数分削除
行削除
[D] ...カーソルから行の終端までの文字を削除
[d$] ...カーソルから行の最後までを削除
[d^] ...カーソルから行の先頭までを削除
[dd] ...カーソルの行を1行削除
数字[dd] ...カーソルの行をn行削除
:行番号[d] ...指定行削除
:開始行,終了行[d] ...指定範囲行削除
:g/文字列/d ...指定文字列のある行を全て削除
ワード削除
[dw] ...1ワード削除(ワード:前後を空白かTABに挟まれた文字列)
数字[dw] ...指定ワードを削除
[de] ...1ワード削除(dwと異なる点は区切り文字(空白 or TAB)を削除しない)
数字[de] ...指定ワードを削除
[df文字列 ...カーソルから最初に見つかった指定文字列までを削除
コピー&ペースト
行コピー
[yy] ...カーソル位置の現在行をコピー
行数[yy] ...カーソル位置の現在行から指定行数分をコピー
ワードコピー
[yw] ...カーソル位置から1ワード分コピー
数字[yw] ...カーソル位置から指定ワード分コピー
その他コピー
[yl] ...1文字分コピー
[y0] ...カーソル位置から行頭までコピー
[y$] ...カーソル位置から行末までコピー
ペースト
[p] ...コピーした内容をカーソルの後にペースト
[P] ...コピーした内容をカーソルの前にペースト
検索
[/]文字列 ...カーソルの後方に検索を行う
[?]文字列 ...カーソルの前方に検索を行う
[n]文字列 ...次の検索該当文字列へ([/]→後方に [?]→前方に)
[N]文字列 ...前の検索該当文字列へ
置換
1文字だけ
[r]文字 ...カーソルの文字を1文字だけ違う文字に変更(r: Replace の意味)
数字[r]文字 ...カーソルから指定文字分を違う文字に変更
[R] ...カーソルからESCを押すまでの文字を上書き更新
ワード(c系)
[cw] ...カーソルから1ワード分をESCを押すまで入力した文字に置換
数字[cw] ...カーソルから指定ワード数分をESCを押すまで入力した文字に置換
[ce] ...カーソルから1ワード分をESCを押すまで入力した文字に置換(区切り文字を置換しない)
数字[ce] ...カーソルから指定ワード数分をESCを押すまで入力した文字に置換
[cf]文字列 ...カーソルから最初に見つかった指定文字列までをESCを押すまで入力した文字に置換
[C] ...カーソルから行の最後までをESCを押すまで入力した文字に置換
指定(s系)
[s] ...カーソルの文字をESCを押すまで入力した文字に置換
数字[s] ...カーソルから指定文字数分をESCを押すまで入力した文字に置換
[S] ...カーソルから行の最後までをESCを押すまで入力した文字に置換
:s/文字列1/文字列2/ ...カーソル行で最初の「文字列1」のみを「文字列2」に置換する(s: Substitute の意味)
:s/文字列1/文字列2/g ...カーソル行の「文字列1」を全て「文字列2」に置換する(g: Global の意味)
:s/文字列1/文字列2/c ...カーソル行で最初の「文字列1」を「文字列2」に置換する前に確認が入る(c: Cheange の意味)
:行数s/文字列1/文字列2/ ...指定行で最初の「文字列1」のみを「文字列2」に置換する
:行数s/文字列1/文字列2/g ...指定行で「文字列1」を全て「文字列2」に置換する
:%s/文字列1/文字列2/g ...全ての行で「文字列1」を全て「文字列2」に置換する
:開始行,終了行s/文字列1/文字列2/ ...指定範囲行内で各行の最初の「文字列1」を「文字列2」に置換する
:開始行,終了行s/文字列1/文字列2/g ...指定範囲行内の「文字列1」を全て「文字列2」に置換する
:開始行,$s/文字列1/文字列2/g ...指定開始行から最終行までの「文字列1」を全て「文字列2」に置換する
:&, & ...直前のsコマンドの繰り返し
小文字、大文字
~ ...カーソル行の大文字⇔小文字を置換 (置換完了のESCは不要)
数字~ ...カーソルから指定文字分の大文字⇔小文字を置換 (置換完了のESCは不要)
結合(改行をスペースに置換)
[J] ...現在行と直下の行を結合する
数字[J] ...現在行から指定行数下を結合する
取り消し
[u] ...直前の操作をやめる(u: Undo の意味)
[U] ...行全体に操作を取りやめる
[.] ...直前の変更操作の繰り返し
Ctrl-[R] ...取り消しの取り消し
ウインドウ操作
:sp ファイル名 ...ウインドウを横に分割
:vs ファイル名 ...ウインドウを縦に分割
:q,:only ...カーソルのあるウインドウ以外を全部閉じる
:new ...空の横ウインドウを開く
:vnew ...空の縦ウインドウを開く
Ctrl-w w ...次のウインドウに移動
Ctrl-w p ...前のウインドウに移動
Ctrl-w o ...現在のウインドウ以外を閉じる
バッファ
:ls ...バッファリストの表示
:b ...バッファ バッファを表示
:bn ...次のバッファを表示
:bp ...前のバッファを表示
:bd ...バッファ削除 バッファ番号指定は :bd 5などで指定可能
その他
:set nu ...行番号を表示する
:set nonu ...行番号の表示をやめる
:set showmode ...現在のモードを表示する
:set showmatch ...()や{}の対応の報告をするようになる
:set ignorecase ...大文字/小文字の区別なく検索する
:set autoindent ...自動インデントモード
:set noautoindent ...自動インデントモードをやめる
:set all ...すべてのオプションを表示する
:set ruler ...ルーラー(右下に表示される行・列の番号)を表示する
:set tabstop=数値 ...タブの大きさを半角スペース数で指定
:set nowrap ...折り返し表示しない
:set history=数値 ...コマンド履歴の保存数
:set backup ...ファイルを保存する時にバックアップファイルを作成する
:set nobackup ...バックアップファイルを作成しない
:syntax on,off ...カラー表示のオンオフ
:Tutorial ...30分程度のVi利用方法のチュートリアル
:vert diffsplit ファイル名 ...今のファイルと、他のファイルとの差分を取るコマンド