INDEX
POSIX標準でUNIX系OSに必ず存在するモードがあるエディタ。
vi とは
viは他のエディタと違い、「コマンドモード」、「入力モード」というのがあり、それぞれのモードを切り替えて使用します。起動した直後は「コマンドモード」になっています。入力・編集コマンドを入力することで、「入力モード」へと切り替わり、文字入力が可能となります。また、ESCキーを押すことで「コマンドモード」に戻ります。どちらかのモードかわからなくなったら、とりあえずESCキーを押すようにするといいでしょう。また、環境によっては、「コマンドモード」でESCキーを押すとBEEP音を鳴らすようになっているものありますので目安にもなると思います。
vi コマンドリファレンス
斜体のものは、適切なものを入力。[ と ] で囲まれたものは省略可能。
起動
- vi [ファイル名1 [ファイル名2 ...]]
- 編集対象のファイルを開く(複数ファイルも可)。ファイル名省略時は起動のみ。存在しないファイルの場合は新規作成となる
- vi +[n] ファイル名
- n行目から表示する。nを省略時は最後行を表示
- vi +/文字列 ファイル名
- 文字列が存在する行から表示する
- vi -r ファイル名
- 壊れたファイルをリカバリする
ファイル操作 書き込み
- w [ファイル名]
- 編集中のテキストを現在のファイル(指定ファイル)に保存
- w! [ファイル名]
- 編集中のテキストを現在のファイル(指定ファイル)に強制的に書き込む
- n[,m]w[!] ファイル名
- 編集中のテキストの行nから(行mまで)をファイルに保存
- [n[,m]]w >> ファイル名
- 編集中のテキストをファイルの最後に書き加える
ファイル操作 読み込み
- :[n]r ファイル名
- 現在の行(n行目)の下の行にファイルを読み込み、挿入する
- :-[n]r ファイル名
- 現在の行(n行目)の上の行にファイルを読み込み、挿入する
- :[n]r! コマンド
- 現在の行(n行目)の下の行にコマンドの実行結果を挿入する
- :-[n]r! コマンド
- 現在の行(n行目)の上の行にコマンドの実行結果を挿入する
- :args
- 編集ファイルの一覧を表示する
ファイル操作 切り替え
- :n
- 複数個のファイル編集時、変更した場合は保存して、次のファイルを編集対象とする
- :n!
- 複数個のファイル編集時、変更した場合も保存せず、次のファイルを編集対象とする
- :e#
- 一つ前の編集ファイルに戻る
- :e!%
- 現在のファイルを再ロードして、最初から編集をやり直す
- :e ファイル名
- 変更した場合は保存して、指定ファイルを編集対象とする
- :e! ファイル名
- 変更した場合も保存せず、指定ファイルを編集対象とする
- :rewind
- 変更した場合は保存して、リストの最初から編集をやり直す
- :rewind!
- 変更した場合も保存せず、リストの最初から編集をやり直す
終了
- ZZ
- viを終了(内容が変更されている場合は保存)
- :wq
- ファイルに保存してvi終了
- :q
- viを終了(内容が変更されている場合は警告)
- :q!
- viの強制終了(内容が変更されていても保存されない)
カーソル移動 (文字・行単位)
- [n]h , [n]← , BS
- 1(n)文字左へ移動(←)
- [n]l , [n]→ , SPACE
- 1(n)文字右に移動(→)
- [n]j , [n]↓ , Ctrl+N
- 1(n)行下へ移動(↓)
- [n]k , [n]↑ , Ctrl+P
- 1(n)行上へ移動(↑)
- ^
- 行の頭へ移動
- $
- 行の最後へ移動
- G , :$
- ファイルの最終行に移動
- nG , :n
- n行目に移動
カーソル移動 (画面内・画面単位)
- H
- 画面の最上行に移動
- M
- 画面の中央行に移動
- L
- 画面の最下行に移動
- Ctrl+F
- 1ページ下へ
- Ctrl+B
- 1ページ上へ
- Ctrl+D
- 半ページ下へ
- Ctrl+U
- 半ページ上へ
入力・編集
(コマンドモードでここのコマンドを入力すると入力モードになります)
- a
- カーソルの右から入力開始
- A
- 行末から入力開始
- i
- カーソルの左から入力開始
- I
- 行頭から入力開始
- o
- 現在の行の下に1行挿入し、その行頭から入力開始
- O
- 現在の行の上に1行挿入し、その行頭から入力開始
- J
- 次の行と現在の行とを結合する
- nJ
- 現在の行を含めn行を結合する
コピー&ペースト
- [n]yy , [n]Y
- 現在の行(カーソル行から下にn行)をバッファにコピー
- yw
- 単語をバッファにコピー
- p
- バッファ内のテキストを挿入(文字、単語はカーソルの右に、行は現在の行の下に挿入される)
- P
- バッファ内のテキストを挿入(挿入位置はpの逆。文字、単語はカーソルの左に、行は現在の行の上に挿入される)
カット
- x
- カーソル上の1文字削除
- X
- カーソルの左の文字を1文字削除
- dd
- 現在の行を削除(バッファにコピーされる)
- ndd
- 現在の行からn行を削除(バッファにコピーされる)
- dw
- カーソル上の一語を削除
- dfc
- カーソル位置から指定したcまでを削除
- d$
- カーソル位置から行の最後までを削除
- d^
- カーソル位置から行の先頭までを削除
- :n,md
- n行からm行を削除
検索
- /文字列
- 文字列を検索する
- ?文字列
- 文字列を検索する(逆方向)
- n
- 順方向へ検索する
- N
- 逆方向へ検索する
置換
- r
- カーソル上の1文字を他の1文字に置換
- R
- カーソル上の文字からEscが押されるまでの文字列を置換
- s
- カーソルのある1文字を他の文字列で置換
- S
- 現在の行を他の文字列で置換
- cw
- カーソル位置からこの語の最後までを置換
- cfc
- カーソル位置から指定したcまでを置換
- C
- カーソル位置から行の最後までを置換
- :& , &
- 直前のsコマンドの繰り返し
- :%s/置換え前/置換え後
- 置換え前の文字列を、置換え後の文字列で置換 もっとも近くにある文字列一つに対してのみ実行
- :%s/置換え前/置換え後/g
- ファイルの中すべての文字列に対して、置換えを行う
- ~ (チルダ)
- 大文字/小文字を変更する
Undo・Redo
- u
- 直前の操作を取りやめる
- U
- 行全体の操作を取りやめる
- .(ドット)
- 直前の操作の繰り返し
UNIXコマンドの実行
- :!コマンド
- コマンドを実行する
- :!!
- 直前のコマンドを再実行する
- :sh
- 一時的にシェルに戻る。exitでviに戻る。
- Ctrl+z
- viを一時停止し、バックグラウンドに移動する。
コマンドのフィルタリング
- !コマンド
- コマンドを実行して結果を挿入
- [n]!!コマンド
- 現在行を含む n 行に対してコマンドを実行する。nを省略すると現在行が対象となる。
- !!tr A-Z a-z
- カーソル行の大文字を小文字に変換
テキスト入力の略記
- :ab 文字列 置換え文字列
- <文字列>と入力すると<置換え文字列>に置き換えるように設定する
- :unab 文字列
- <文字列>の置き換え設定を解除する
- :ab
- 一覧表示
その他
- Ctrl+G
- ファイル名、修正の有無、現在の行数などの情報が表示されます
- Ctrl+L
- 画面を再表示
- Shift+Q
- exで編集をする
- vi
- exからviに戻る
オプション
設定と解除
- :set オプション[=n] […]
- オプションの設定
- :set noオプション […]
- 指定オプションを無効にする
- :set
- 現在設定されているオプションを表示する
- :set all
- オプション一覧を表示する
- :set オプション名?
- オプション名の設定状況を表示する
主なオプション ( )内は省略形
- autoindent (ai)
- 改行した時、次の行の先頭は自動的に前の行と同じ字下げ(インデント)になる
- autowrite (aw)
- :!コマンド、:n、:e、[CTRL]-[z]などの実行時に、それまでの編集内容を自動的にファイルに書き込む
- ignorecase (ic)
- 文字列検索時に大文字、小文字の区別をしない
- list
- 行末を$、タブを^Iと表示する。スペースとタブを識別したい場合などに利用する
- number (nu)
- 画面の左端に行番号を表示する
- readonly
- 指定ファイルの保護モードを読み込み専用に設定する
- redraw
- 画面に変更が加えられた時点で再表示を行う。設定がされていないと、削除した行に@が表示される
- showmatch (sm)
- 括弧を入力すると、同一画面内にある対応する括弧上にカーソルが一瞬移動し、元の位置に戻る
- showmode
- テキストモード、コマンドモードなど現在のモードを表示する
- shiftwidth=n (sw)
- Ctrl+d、Ctrl+u、>>、<<などで移動する文字数を設定する
- tabstop=n (ts)
- 画面表示時のタブストップの値を設定(デフォルトは8)する
- wrapmargin=n
- 画面の右端からn文字以内に空白文字が挿入されたときに改行コードを自動的に挿入する
最終更新時間:2008年11月14日 01時50分00秒 指摘や意見などあればSandBoxのBBSへ。