vi コマンドリファレンス

実務でかなりよく使うのでメモ。

起動

vi [file name]* ファイルを開く(複数可能)
vi +n [file name] n行目から表示
vi + [filename] 最後一画面を表示
vi + /[str] [file name] 文字列strが存在する行から表示
vi -r [file name] 壊れたファイルをリカバリ

カーソル移動

h, BS*1
j, Ctr+N
k, Ctr+P
l, SPACE
H 画面の最上行(High)
M 画面の中央行(Middle)
L 画面の最下行(Low)
G ファイルの最終行
nG ファイルのn行目
0 行頭
$ 行末
Ctr+F 1ページ下
Ctr+B 1ページ上
Ctr+D 半ページ下
Ctr+U 半ページ上

入力

a カーソルの右から入力開始
A 行末から入力開始
i カーソルの左から入力開始
o 現在行の下に1行挿入し、その行から入力開始
O 現在行の上に1行挿入し、その行から入力開始

結合

J 次の行と現在行を結合
nJ 下の(n-1)行を現在行と結合

削除

x カーソル上の1文字削除
X カーソルの左1文字削除
dd 現在行を削除+バッファにコピー
ndd n行削除
dw カーソル上の1語削除
df [str] カーソルからstrまでを削除
d$ カーソルから行末まで削除
d^ カーソルから行頭までを削除
:[num1],[num2] d num1行からnum2行を削除

検索

/[str] 文字列strを検索
?[str] 文字列strを逆方向に検索
n 順方向へ検索
N 逆方向へ検索

置換

r カーソル上の1文字を他の1文字に置換
R カーソル上の文字からEscが押されるまでの文字列を置換
:%s/[str1]/[str2] 文字列str1を文字列str2で置換(もっとも近くの1文字のみ)
:%s/[str1]/[str2]/g 文字列str1を文字列str2で全て置換

カット&ペースト

yy 現在行をバッファにコピー
nyy n行分をバッファにコピー
yw 単語をバッファにコピー
p バッファ内のテキストを挿入(単語はカーソル右、行は現在行の下)
P バッファ内のテキストを挿入(pとは逆の位置)

Undo・Redo

u 直前の操作を取りやめる
U 行全体の操作を取りやめる
. 直前の操作を取りやめる

ファイル操作

:w [file name]? 現在のファイルに保存
:w! [filename]? 強制保存
:[num1],[num2] [filename] 行num1から行num2のテキストをファイルに保存
:w >> [file name] 指定ファイルの最後に追加書き込み
:r [filename] 現行の次行にファイルを読み込み、挿入
:r 現行の次行にファイルを読み込み、挿入

終了

ZZ 終了(変更されている場合は保存)
:wq 保存+終了
:q 終了(変更されている場合は警告)
:q! 強制終了

UNIXコマンド実行

:! commandを実行
:!! 直前のコマンドを再実行
:sh 一時的にShellへ戻る。exitで終了

コマンドのリファクタリング

! commandを実行して結果を挿入
!!date 日付を挿入
!!tr A-Z a-z 大文字⇒小文字

テキスト入力の略記

:ab 文字列str1と入力すると、文字列str2に置き換えるよう設定
:unab 文字列str1の置き換え変換設定を解除
:ab 置き換え一覧表示

その他

Ctr+G ファイル名、修正の有無、現在の行数などの情報表示
Ctr+L 画面再表示

コマンド

:set number 行番号を表示
:set no number 行番号表示解除
:set showmode 現在のモードを表示
:set showmatch ()や{}の対応を報告
:set ignorecase 大文字・小文字の区別なく検索するよう設定
:set autoindent 自動インデント
:set noautoindent 自動インデント解除
:set all 全てのオプションを表示

vi設定ファイル設定例

set tabstop=4
set showmode
set autoindent
set nonumber
set showmatch

*1:BackSpace