自分自身が忘れやすいVIMの使い方や機能などの個人的備忘録。なおC-xという表記は「Ctrlキーを押しながらxキーを押す」、C-Xという表記は「CtrlキーとShiftキーを押しながらxキーを押す」、C-X, yという表記は「CtrlキーとShiftキーを押しながらxキーを押して、その後yキーを押す」という意味。
UndoとRedo
困ったら u 連打。
- u
- 元に戻す (Undo)
- C-R
- やり直す (Redo)
検索と置換
基本は、/ コマンドで検索開始。詳細は :help search-commands
で確認のこと。
- /foo
- 次の”foo”の出現箇所にカーソルを移動(ファイル末尾に向かって検索)
- ?foo
- 前の“foo”の出現箇所にカーソルを移動(ファイル先頭に向かって検索)
- *
- カーソル位置にある単語の、次の出現位置に移動
- #
- カーソル位置にある単語の、前の出現位置に移動
置換のコマンドは c が基本で、c{motion}は「{motion}
で指定した位置までをカットした上で挿入モードに入る」操作となる。これだけ読むとdとiで代替できるので必要性を感じないかもしれないけれど、1コマンドである点にメリットがある。たとえば、ソースコード中のint
という単語をlong
へと一つ一つ確認しながら置換していくレシピは:
- ggでファイル先頭にカーソルを戻し、/intで最初の
int
を検索 - ceで単語
int
を削除すると同時に挿入モードに移行(あるいは3文字消すという感覚でc3lでも良い) - longと入力した後にESCで確定
- n で次の置換対象(の候補)にカーソルを移動
- それを置換して良い場合は.で置換操作を再実行し、
置換したくない場合はnでスキップ(次の候補へカーソルを移動)
コマンド.で再実行できる点が、先に記した1コマンドであるメリットとなる。
なお、より高度なExコマンドを使う例は以下:
- :%s/before/after/gc
- ファイル全体を対象に、
before
をafter
に置換していく。最後のcを付けないと自動で一括置換する。
こちらでは置換対象中の一部を使って置換後のパターンを作成できるなど実現可能なことが多い。詳細は :help :s
で確認できる。
ブックマーク
コマンド m を使う。詳細は :help m
を参照。
- m{a-zA-Z}
- 指定したレジスター1に現在のカーソル位置を記憶
- `{a-zA-Z}
- 指定したレジスターに記憶された位置にカーソルを移動
分割ウィンドウの操作
とりあえずC-w, wを覚えるのが一番最初かなと思う。詳細は:help ctrl-w
で確認のこと。
- :sp[lit] [file]
- ウィンドウを分割(ファイル名指定時はそれを新しいウィンドウで編集)
- :vs[plit] [file]
- ウィンドウを左右分割(ファイル名指定可)
- $ vim -o FILE1 FILE2 ...
- FILE1とFILE2を分割ウィンドウ表示で開く
- C-w, w
- 次の分割ウィンドウへ移動
- C-w, {j | k | h | l}
- {上 | 下 | 左 | 右}の分割ウィンドウへ移動
- C-w, {J | K | H | L}
- アクティブな分割ウィンドウを{上 | 下 | 左 | 右}に移動
- ステータスバーのドラッグ
- 分割サイズの変更
設定
set autoindent # 自動インデント機能を有効化 set ruler # 最下行にカーソル位置などの情報を表示 set mouse=a # マウス有効化 set mouse= # マウス無効化
- ここでのレジスターは、単純にデータを記録する場所と解釈して良い。合計52カ所、アルファベット一文字で区別して指定できる。 ↩