Edit

どんな人がこの記事を読むべきか

  • Vimのチートシートが欲しい人

モード

Vimにはモードがあり、Vimエディタを開いた状態はノーマルモードである

ノーマルモードから他のモードに変えてファイル編集を行う

0.png
モード 説明
ノーマルモード カーソル移動、ヤンク、プット、デリート
インサートモード 文字入力
ビジュアルモード 範囲選択、ヤンク、プット
コマンドラインモード 保存、終了、文字列置換、行数表示の切り替え

ノーマルモード

ノーマルモードへの移動の仕方

Vimを開いた直後はノーマルモードである

以下のキーバインドを入力すれば、ノーマルモード以外のモードからノーマルモードに移動することができる

移動前のモード ノーマルモードへ移動するためのキーバインド
インサートモード+ビジュアルモード+コマンドラインモード esc
インサートモード Ctrl+[

ノーマルモードのコマンド

ノーマルモードでは、ノーマルコマンドを使用してテキスト編集を行う

ノーマルモードが扱うコマンドの要素は以下のように分類される

機能 説明
カウント モーションの前に数字を入力することで使用できる
モーション カーソル移動を行う
オペレータ オペレータ+(カウント+)モーションの順番で組み合わせて使うことができる
テキストオブジェクト オペレータの後ろ、または、ビジュアルモードで使える
その他 その他のコマンド

モーション

モーション 説明
h 左に1つカーソルを移動
j 下に1つカーソルを移動
k 上に1つカーソルを移動
l 右に1つカーソルを移動
w 次の単語の先頭に移動
e 単語の末尾に移動
b 前の単語の先頭に移動
% (,),[,],{,}などのカーソルの下にある文字に対応しているもう一方の文字に移動
0 行頭に移動(インデントを無視)
^ 行頭に移動
$ 行末に移動
} 次の段落に移動
{ 前の段落に移動
f<char> 右の<char>に移動
F<char> 左の<char>に移動
t<char> 右の<char>の1つ左に移動
T<char> 左の<char>の1つ右に移動
; f, F, t, Tを繰り返す
, f, F, t, Tを反対方向に繰り返す
H ウィンドウ内の一番上の位置にカーソルを移動
M ウィンドウ内の中心の位置にカーソルを移動
L ウィンドウ内の一番下の位置にカーソルを移動
<num>G <num>行目の先頭に移動
<num>gg <num>行目の先頭に移動
G ファイルの最終行に移動
gg ファイルの先頭行に移動

オペレータ

オペレータ 説明
y ヤンク
d 削除
c 削除して、インサートモードに切り替え
gU 大文字にする
gu 小文字にする
g~ 大文字と小文字の切り替えをする
> 1インデント増やす
< 1インデント減らす
zf 折りたたみを作成する

テキストオブジェクト

iは内側、aは全体というルールを覚えれば、w, p, 各記号と組み合わせた時のオブジェクトの選択範囲を覚えやすくなる

テクストオブジェクト 説明
iw 単語
aw 単語(右のスペースを含む)
ip 段落
ap 段落(段落下の改行を含む)
i[ []ブロックの内部のみを選択
i] []ブロックの内部のみを選択
a[ []ブロックの全体を選択
a] []ブロックの全体を選択
i( ()ブロックの内部のみを選択
i) ()ブロックの内部のみを選択
a( ()ブロックの全体を選択
a) ()ブロックの全体を選択
i< <>ブロックの内部のみを選択
i> <>ブロックの内部のみを選択
a< <>ブロックの全体を選択
a> <>ブロックの全体を選択
i" ““ブロックの内部のみを選択
i” ““ブロックの内部のみを選択
a” ““ブロックの全体を選択
a” ““ブロックの全体を選択
i' ‘‘ブロックの内部のみを選択
i’ ‘‘ブロックの内部のみを選択
a’ ‘‘ブロックの全体を選択
a’ ‘‘ブロックの全体を選択

その他

カウント、モーション、オペレータ、テキストオブジェクトの他にも便利なコマンドが存在する

コマンド 説明
yy 行ヤンク
dd 行デリート
D 現在のカーソルから行末まで削除
cc 行を削除してインサートモードに切り替え
C 現在のカーソルから行末まで削除してインサートモードに切り替え
p 現在のカーソルの後にプット
P 現在のカーソルの前にプット
» 現在の行にインデントを追加する
« 現在の行からインデントを削除する
r カーソル下の文字をrコマンドを打った直後の文字に置換する
R リプレースモード(※1)に切り替え
s カーソル下の文字を削除してインサートモードに切り替え
S 行を削除してインサートモードに切り替え
J 行を空白を挟んで連結
gJ 行を空白を挟まずに連結
* カーソル下の単語を下方向に検索
# カーソル下の単語を上方向に検索
n 検索した単語の次の位置にカーソルを移動する
N 検索した単語の前の位置にカーソルを移動する
u 変更を元に戻す
“<key> オペレータを含むコマンド、pまたはPの前に入力する、コマンド実行時にレジスタを<key>に指定する
“_ オペレータを含むコマンドの前に入力する、コマンド実行時にレジスタにテキストを格納せずに破棄する
u 変更を元に戻す
q<key> マクロの記憶をする、qでマクロを記録するのを終了して@<key>でマクロを実行する
Ctrl-r 元に戻した変更をやり直す
~ カーソル下の文字の大文字/小文字を切り替え
Ctrl-a カーソル下の数値をインクリメント
Ctrl-x カーソル下の数値をデクリメント
Ctrl-o ジャンプリストで現在より古いカーソル位置に移動
Ctrl-i Ctrl-oで遡ったジャンプリストを逆に進めたカーソル位置に移動
g; 変更を加えた位置を遡って、そのカーソル位置に移動
g, g;で遡った変更リストを逆に進めたカーソル位置に移動
Ctrl-z Vimを一時停止してターミナルに戻る、ターミナルでfgコマンドと叩いて再開
ZZ 保存して終了
Ctrl-e 1行スクールダウン
Ctrl-y 1行スクロールアップ
Ctrl-d 半画面スクロールダウン
Ctrl-u 半画面スクロールアップ
Ctrl-f 1画面スクロールダウン
Ctrl-b 1画面スクロールアップ
z+ 現在のカーソルが画面の1番上になるようにスクロール
z. 現在のカーソルが画面の中央になるようにスクロール
z- 現在のカーソルが画面の1番下になるようにスクロール

※1 リプレースモードとは、キーボードから入力した文字がカーソル位置にあった文字と置き換わっていくモードのことである

インサートモード

インサートモードへの移動の仕方

以下のコマンドを入力すれば、インサートモード以外のモードからインサートモードに移動することができる

インサートモードへ移動するためのコマンド 操作
i カーソルの前に移動してインサートモードへ移動
I 行の先頭に移動してインサートモードへ移動
a カーソルの後ろに移動してインサートモードへ移動
A 行の末尾に移動してインサートモードへ移動
o 前に改行してインサートモードへ移動
O 後ろに改行してインサートモードへ移動

インサートモードのキーバインド

インサートモードではテキスト入力が主な操作になるが、インサートモードでしか使えないキーバインドが存在する

キーバインド 操作
Ctrl-a 前回のインサートモードで入力したテキストを再度入力
Ctrl-@ 前回のインサートモードで入力したテキストを再度入力した後にノーマルモードに移動
Ctrl-w カーソルの直前の1単語を削除する、カーソルより後のテキストは削除されない
Ctrl-u カーソルより前のテキストを削除する
Ctrl-t インデントを1つ右にずらす
Ctrl-d インデントを1つ左にずらす
Ctrl-o ノーマルモードを一度だけ実行した後にインサートに戻るインサートノーマルモードに移動する
Ctrl-x + Ctrl-f ファイル/ディレクトリの補完をする
Ctrl-n テキスト内に存在する単語から入力補完する候補を表示する or 補完ウィンドウが表示されているときは次の候補に移動する
Ctrl-p テキスト内に存在する単語から入力補完する候補を表示する or 補完ウィンドウが表示されているときは前の候補に移動する
Ctrl-e 補完ウィンドウが表示されているときに、候補を選択せずに補完ウィンドウを閉じる

ビジュアルモード

ビジュアルモードへの移動の仕方

以下のコマンドを入力すれば、ノーマルモードからビジュアルモードに移動することができる

ビジュアルモードへ移動するためのコマンド 操作
v 文字単位の範囲選択を開始する
V 行単位の範囲選択を開始する
Ctrl+v 矩形洗濯を開始する

ビジュアルモードの機能

選択している範囲に対してノーマルモードのオペレータを実行する事ができる

コマンドラインモード

コマンドラインモードへの移動の仕方

以下のコマンドを入力すれば、ノーマルモードからコマンドラインモードに移動することができる

コマンドラインモードへ移動するためのコマンド 操作
: 基本的なコマンドラインを実行する
/ 文字列の検索をする

コマンドラインモードのコマンド

以下がコマンドラインモードで実行できるコマンドである、便宜上「:」と「/」を含める

コマンド 操作
:w 変更した内容を保存する
:w <filename> ファイル名を<filename>に指定して内容を保存する
:q Vimを終了する
:q! Vimをまだ保存していない変更内容を破棄して終了する
:wq 変更した内容を保存して終了する
:%s/<text1>/<text2>/g <text1>から<text2>へ置換する
<text> <text>という文字列を検索する
comments powered by Disqus