1.Vim cheat sheet

x -- yは、打鍵xyの効用をもたらすことを表す。

ただし、yの末尾に括弧書きがあるものは、vimrcによりdefaultのキーをxで上書きしていることを意味する。

1.1.Normal mode

h -- 1文字左に移動
j -- 1文字下に移動
k -- 1文字上に移動
l -- 1文字右に移動
Space-h -- 行頭に移動(0)
Space-j -- 画面の半分下にスクロール(Ctrl-f)
Space-k -- 画面の半分上にスクロール(Ctrl-b)
Space-l -- 行末に移動($)
sv -- 画面を横に分割(Ctrl-w + v)
ss -- 画面を縦に分割(Ctrl-w + s)
sh -- 左の画面に移動(Ctrl-w + h)
sj -- 下の画面に移動(Ctrl-w + j)
sk -- 上の画面に移動(Ctrl-w + k)
sl -- 右の画面に移動(Ctrl-w + l)
sq -- 画面を閉じる(:q)
w -- 次の単語の先頭に移動
b -- 前の単語の先頭に移動
( -- 前の段落に移動({)
) -- 次の段落に移動(})
% -- 対応する括弧に移動
gg -- ファイルの先頭に移動
G -- ファイルの末尾に移動
g, -- 変更リスト前方にジャンプ
g; -- 変更リスト後方にジャンプ
f -- 入力した文字を同一行内で前方検索
F -- 入力した文字を同一行内で後方検索
; -- 直前のf, Fを実行
, -- 直前のf, tを逆向きに実行
* -- カーソル位置の単語を前方検索
# -- カーソル位置の単語を後方検索
/ -- 入力した単語を前方検索
? -- 入力した単語を後方検索
n -- 直前の/, ?を実行
N -- 直前の/, ?を逆向きに実行
i -- カーソルの前の位置でInsert modeへ移行
a -- カーソルの後の位置でInsert modeへ移行
I -- 行頭でInsert modeへ移行
A -- 行末でInsert modeへ移行
o -- 下に改行してInsert modeへ移行
O -- 上に改行してInsert modeへ移行
J -- 下の行を現在の行に連結
x -- 1文字削除
r -- 1文字置換
dd -- 現在の行を消去
cc -- 現在の行を消去してInsert modeへ移行
yy -- 現在の行をヤンク
D -- カーソル位置から行末までを消去
C -- カーソル位置から行末までを消去してInsert modeへ移行
Y -- カーソル位置から行末までをヤンク
p -- カーソル位置の後にペースト
P -- カーソル位置の前にペースト
u -- 取り消し
U -- 取り消しの取り消し(Ctrl-r)
. -- 最後の変更を繰り返す
q: -- 最近使ったCommandを表示
: -- Command line modeへ移行
v -- Visual modeへ移行
V -- Visual line modeへ移行
Ctrl-v -- Visual block modeへ移行
gV -- 直前のVisual line modeへ復帰
ms -- Terminal modeへ移行(:terminal)

1.2.Visual mode

o -- 選択範囲の反対側にカーソルを移動
= -- 選択範囲をインデント
d -- 選択範囲を削除
c -- 選択範囲を削除してInsert modeに移行
p -- 選択範囲をヤンクした内容で置換
c -- 選択範囲をヤンク

1.3.Insert mode

Esc -- Normal modeへ移行
Ctrl-h -- 手前の文字を消去
Ctrl-w -- 手前の単語を消去
Ctrl-l -- 候補を挿入(Ctrl-n)
    Ctrl-l -- 次の候補へ(Ctrl-n)
    Ctrl-p -- 前の候補へ

1.4.Command line mode

:q -- 終了
:wq -- 保存して終了
:q! -- 保存せずに終了
:h {subject} -- マニュアルの項目{subject}を参照
:{range}normal {commands} -- rangeの各行に対して、文字列{commands}をnormalコマンドとして実行
:[range]s/{pattern}/{string}/[flag] -- [range]の各行に対して、{pattern}を{string}に置換
    [flag]
        g -- 行内のすべての{pattern}を対象とする
        c -- 置換前に確認を行う
:vim {pattern} {file}... -- {file}を対象に文字列{pattern}を検索

2.Technique

2.1.. operator

.を使用することにより、反復処理の打鍵数を劇的に減らすことができる。

ファイル内の文字列fooを順番に削除する。

/foo -- 文字列fooを検索
daw -- 文字列fooを削除
n -- 次のfooに移動
. -- 文字列fooを検索
n
.
n
...

同一行内の文字aを大文字Aに変換。

fa -- 行内のaに移動
rA -- Aに置換
; -- 次のaに移動
. -- Aに置換
;
...

2.2.Text object selection

以下に示す書式で、ある対象にある動作を行うことができる。

ACTION I/A OBJECT
    ACTION -- { c | d | v }
        c -- change object
        d -- delete object
        y -- yank object
        v -- select object
    I/A -- { i | a }
        i -- `i`nner object without white space
        a -- `a`n object including space
    OBJECT -- { w | p | t | " | ' | ` | (, ), [, ], {, }, <, > }
        w -- word
        p -- paragraph
        t -- tag (xml node)
        ", ', ` -- quoted string
        (, ), [, ], {, }, <, > -- enclosed string

Exsamples:
    (c, d, y, v)
    ciw -- カーソル位置の単語を削除してInsert modeへ移行
    diw -- カーソル位置の単語を削除
    yiw -- カーソル位置の単語をヤンク
    viw -- カーソル位置の単語を対象にVisual modeへ移行

    (i, a)
    dip -- 段落を削除
    dap -- 段落を空行を含めて削除

    (w, p, t, (, ", ...)
    diw -- 単語を削除
    dip -- 段落を削除
    dit -- xml要素を削除
    di( -- 括弧内のテキストを削除
    di" -- double quote 内の文字列を削除
    ...

3.Plugin

mq -- 現在のバッファーを対応するプログラムに渡して実行(vim-quickrun)
mk -- 最近使ったファイルを選択(unite.vim)
md -- 最近使ったディレクトリを選択(unite.vim)
ml -- 行を選択(unite.vim)
mf -- ファイラーを起動(vimfiler.vim)