vi 操作チートシート

移動

h,j,k,l左,下,上,右へ1文字移動
w次の単語へ移動
b前の単語へ移動
e現在または次の単語の末尾へ移動
行頭へ移動
^行の空白以外の最初の文字へ移動
$行末へ移動
3G or :33行目に移動
G最終行へ移動
Ctrl + e1行下方へ移動
Ctrl + y1行上方へ移動
Ctrl + d半画面分下方へ移動
Ctrl + u半画面分上方へ移動
Ctrl + f1画面分下方へ移動
Ctrl + b1画面分上方へ移動
H画面先頭へ移動
M画面真中へ移動
L画面最終行へ移動
カーソル位置の括弧と対をなす括弧に移動

検索

正規表現を使うときは、適宜、エスケープすること。例えば量指定の{}は¥{3¥}のように。

f文字同一行内で指定文字を前方検索(ex.fdでdを前方検索)
F文字同一行内で指定文字を後方検索(ex.Fdでdを後方検索)
;同一行内で次を検索
/正規表現ファイル全体で前方検索
?正規表現ファイル全体で後方検索
nファイル全体で次を検索
Nファイル全体で前を検索

入力モード移行

a右に文字を入力
A行末に文字を入力
i文字を入力
I行頭に文字を入力
o下に行を追加
O上に行を追加
r1文字置換(置換後はコマンドモード)
Rカーソル位置から入力やめるまで上書き

コピー(ヤンク)・変更・削除

コピー・変更・削除を示す識別子はそれぞれ「y・c・d」。cは入力モードに移行する。コマンドの基本形は、「識別子+対象」。

コマンド対象
yl,cl,dl1文字
yw,cw,dw1単語
yy,cc,dd現在行。3yyなどで3行対象。
y0,c0,d0行頭からカーソル位置の直前まで
y$,c$,d$カーソル位置から行末まで
yG,cG,dG現在行から最終行まで
yf,cf,dfカーソル位置から前方の指定文字まで
yF,cF,dFカーソル位置の直前から後方の指定文字まで

その他のコマンド

s1文字変更
x1文字削除
X左の1文字を削除
~カーソル位置の文字を大文字・小文字に変更

ペースト

pカーソル位置の右側にペースト
Pカーソル位置の左側にペースト
“a3yy3行コピーしてバッファaに保存(aの部分はa〜zの26個使える。3yyの部分は上記のコピー・削除系コマンドのいずれも使用可)
“apバッファaの内容をカーソル位置の右側にペースト

可視選択

範囲選択の開始後、移動系コマンドで対象位置まで移動し、削除・コピー・変更コマンドを実行する。削除・コピーした場合はpなどで貼り付け可能。

v文字単位の範囲選択を開始。d,y,cで終了するとその動作が選択範囲に対して行われる。
Shift + v行単位の範囲選択を開始。d,y,cで終了するとその動作が選択範囲に対して行われる。

exコマンド

行指定では、.(現在行)、$(最終行)を使用可能。

:[x,y]co[z]x行からy行をコピーして、z行の下に出力
:[x,y]m[z]x行からy行をz行の下に移動
:[x,y]dx行からy行を削除

検索して置換・削除

正規表現を使うときは、適宜、エスケープすること。例えば量指定の{}は¥{3¥}のように。

:[n,m]s/regex/replace/[g or c]regexにマッチする文字列をreplaceに置換。
[n,m]は対象行の範囲(行番号)を指定。
n=^(先頭行)、m=$(最終行)を指定可。
[n,m]の代わりに%指定で全行対象。
[g or c]の省略時は行内で最初にマッチする文字列のみ対象。
[g or c]のc指定時は置換前に確認。
:[n,m]g/regex/dregexにマッチする行を削除。[n,m]の意味は上に同じ。

操作のやり直し・繰り返し

uアンドゥ
U行内の変更を全てアンドゥする。
その行からカーソルを移動していない場合にだけ有効。
Ctrl + rリドゥ
.直前の変更操作の再実行

マクロ

q[a-z]マクロの記録開始
qマクロの記録終了
[n]@[a-z]マクロをn回実行。n省略時はn=1。[a-z]は記録時に指定した文字。
@@直前に実行したマクロを再実行
:reg直前に実行したマクロを再実行

マップ(キー割り当て)

:map {lhs} {rhs}キー入力{lhs}を{rhs}に割り当てる。
:unmap {lhs}キー{lhs}のマッピングを削除する
:mapマッピングを一覧表示

ファイルの編集・保存と終了

後ろに ! をつけることで強制の意味になる。例えば :q! でファイルに変更があっても強制終了する。

:e ファイル名ファイルを開く。「:e!」で自分自身のファイルを(変更があっても)強制的に開き直す。
:qviを終了
:wファイルに保存
:w ファイル名名前をつけて保存
:wqファイルに保存して終了
:wq ファイル名名前をつけて保存して終了

その他

:h(elp)マニュアルを表示(:qで脱出)
:his(tory)コマンド履歴を表示
:reg(ister)レジスタ一覧を表示
:se(t) nu(mber)
:se(t) nonu(mber)
行番号の表示・非表示を切り替え
:se(t) t(ab)s(top)=4タブ長を4バイトとする
:se(t) i(gnore)c(ase)
:se(t) noi(gnore)c(ase)
検索時に大文字小文字を区別するかしないかの切り替え。ignorecaseで区別を無視する。
:se(t) a(uto)i(ndent)
:se(t) noa(uto)i(ndent)
自動インデントの有効・無効を切り替え
:se(t) allすべてのオプションを表示
:n(ext)複数ファイルを開いていた場合、次のファイルへ移動
:rew複数ファイルを開いていた場合、最終ファイルから先頭ファイルへ移動(rewind)
:!コマンド指定の外部コマンドの実行結果を一時的に表示
:!!直前のコマンドを再度実行
:rファイル名指定ファイルの内容を次の行に挿入
:r!コマンド指定の外部コマンドの実行結果を次の行に挿入
J行の連結
>>行頭にタブを挿入
<<行頭のタブを削除
Ctrl + G現在編集中のファイル名を表示