その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

6月になったので、「いまだに(Vi | Vim)と仲良くできねえ!」という方にチートシートを捧げます

「いまだにVim (もしくはVi)と仲良くできねえ!」という方が僕の身の周りに多いような印象を受けました。

「計算機センターでのサーバマシン(エディタはVim)と触れ合うのがストレスでたまらない!」
「git のコミットログを書こうとしたら変なエディタ(Vim の事)が起動してエラい目に遭った!」

などという苦情が多数寄せられており、Vim 派閥としては心苦しい限りです。
こうしたVim との不仲につけ込んで、優秀な人材がEmacs 派閥に取り込まれるのを看過するわけには行きません。
ので、チートシートを捧げます。
ほとんど僕が使っているコマンド群です。覚える量は多くありませんが、結構快適に作業が出来るはずです。
(というか、これくらいしかコマンドを知らないので……)

その前に、Vim を楽しく使うに当たってやっておくとよいこと

  1. CapsLock キーをCtrl キーにリプレースする
  2. Emacs をアンインストールする*1

CapsLock キーをCtrl にリプレースする方法に関しては、
こちら
Windows7でCtrlキーとCapsキーを入れ替える一番簡単な方法 - モスマン
や、こちら
ubuntu 10.10 にて capslock を ctrlにする (capsもctrlも両方ctrlキーにする) - 計算機と戯れる日々
なんかが参考になります。
Vim だけに限らず、Emacs 教の硬派な方もCapsLock をCtrl に変えておくと良いと思います。

間違えやすいので注意

OS の保持しているクリップボード情報と、Vim の保持しているクリップボード情報は異なっています。
マウスの右クリックメニュー等でコピーした内容を、Vim上の'p' キーによってペーストする事は出来ません。
(この場合は素直に、Vim の上で右クリックし貼り付けを行えば良いと思います)
また、その逆も然りです。Vim 上で'yy' などによってコピー(ヤンク)した内容を右クリックメニューで貼り付ける事は出来ません。
(.vimrcの設定によってはここら辺のクリップボード情報を共有させれた気もしますので、興味のある方は調べて見てください)

ここからチートシート

<読み方>
'キー + キー' で表されているものは同時に押して下さい。
キーが連続で書かれている場合は、左に書かれているキーから順に押下してください。
e.g.
Ctrl + a :Ctrl キーとa キーを同時に押下してください。
abc:a キーを押してからb キーを押して、それからc キーを押して下さい


なお、独断と偏見で、便利っぽいコマンドは太字にしてあります。

最低でもこれを覚えておかないと死ねる
Esc 入力・ヴィジュアルモードから抜けてコマンドモードに移行する
Ctrl + [ 同上。僕的にはEsc よりもこっちの方がオススメです*2
i 入力モードに移行する
:q Vim を終了する
:q! 作業内容を破棄してVim を終了する。どうしても終了したい時などに
:w 作業内容を保存する
:wq 作業内容を保存してからVim を終了する。
u Undo する
Ctrl + r Redo する

カーソル移動編(コマンドモードの時にタイプしてください)
j, k. h, l (それぞれ)下、上、左、右にカーソルを1マス移動させる
Ctrl + f 下方向にページ送り(Page Down キーと同じ働き)
Ctrl + b 上方向にページ送り(Page Up キーと同じ働き)
gg 一番上(1行目)にジャンプする
Shift + g 一番下(最終行)にジャンプする
[行番号]gg 指定した行番号にジャンプする。たとえは'123gg' だと123行目にジャンプする
0(ゼロ) 行頭に飛ぶ
$ 行末に飛ぶ
w 次の単語に飛ぶ
b 前の単語に飛ぶ
% 対応するカッコに飛ぶ

入力モード移行編(コマンドモードの時にタイプしてください)
Shift + i 行頭に飛んでから入力モードに移行する
a 1つ後ろにカーソル移動してから入力モードに移行する
Shift + a 行末に飛んでから入力モードに移行する
s カーソルが置いてある位置にある1文字を削除してから入力モードに移行する
Shift + s カーソルが置いてある行の内容を全て削除してから入力モードに移行する
Shift + r 置換モード(Insertキーを押した状態と等価)で入力モードに移行する
cw カーソルが置いてある位置にある1単語を削除してから入力モードに移行する

ヴィジュアルモード関連編(コマンドモードの時にタイプしてください)
v ヴィジュアルモードに移行する
Ctrl + v 矩形モードでヴィジュアルモードに移行する
(範囲指定されている時に)y ヴィジュアルモードで選択されている範囲の文字列をコピー(ヤンク)する
(範囲指定されている時に)d ヴィジュアルモードで選択されている範囲の文字列を削除(実は切り取り)する
(矩形モードで範囲指定されている時に) > 指定されている範囲の全ての行を右方向にインデントする
(矩形モードで範囲指定されている時に) 指定されている範囲の全ての行を左方向にインデントする

文字列操作
x 1文字を削除する
dw 1単語を削除する
yy 行ごとコピーする
dd 行ごと削除(実は切り取り)する
p コピーもしくはカットした内容をペーストする(行ごとコピーしていた場合は次の行にペーストされる)
Shift + j 現在の行と次の行を結合する(現在の行の後ろに次の行の内容を連結する)
Shift + ^ カーソル位置にある英字大文字を小文字に、またはその逆変換を行う
== syntax の設定に従って自動インデントする
>> 右方向にインデントする
<< 左方向にインデントする

検索・置換
/[検索したい文字列] 検索したい文字列で検索する
(検索状態で)n 次の検索候補にジャンプする
(検索状態で)Shift + n 前の検索候補にジャンプする
:%s/[置換対象文字列]/[置換する文字列]/[オプション] 置換する

合わせ技
gg=(Shift + g) 全ての行を自動インデントする
d(Shift + g) カーソル位置移行の内容を全て削除する


Vim と仲良く付き合っていく助けになれば幸いです。

*1:もちろん冗句ですよ、ええ、ええ

*2:キーボードの左上隅にいちいち移動しなくて良いので。