Heavy Watal

vi

基礎知識

オリジナルがvi、改良版がvim (Vi IMproved)。 ただし、shの正体がbashであるように、LinuxやMacに入ってるviの正体はvim。 vimのデフォルトは拡張を無効にしたvi互換モード。 つまり設定をいじらなければ起動コマンドはviでもvimでも同じ?

文字入力はインサートモード、それ以外はすべてノーマルモードで行う。 起動時はノーマルモード。

ノーマルモード

とりあえず覚えてないと死ぬやつ

key action
i インサートモードに移行
:w 保存
:q 終了
:q! 保存しないで強制終了
u 元に戻す
x 1文字削除 (行は消せない)
dd 行カット
ctrl-c 中断

移動

key action
hjkl ←↓↑→
b B 単語頭
w W 次の単語頭
0 行頭
^ 行頭 (非空白)
$ 行末
H 画面先頭
L 画面末尾
gg ファイル先頭
G ファイル末尾
ctrl-b 前ページ
ctrl-u 半ページ上
ctrl-d 半ページ下
ctrl-f 次ページ

数字と組み合わせられる。 e.g., 3jで3行下

eは単語末じゃなくてそのひとつ前に移動するので気持ち悪い。

カーソルの移動だけでなく、コピーなどの動作対象の指定にも使う。

コピペ

key action
d カット
y コピー
P ペースト

カットとコピーは対象を指定する必要がある。

d3l  # 右に3文字カット; 3dl でもいい
diw  # カーソル位置の単語をカット
yy   # 1行まるまるコピー

pはカーソルの右に挿入される謎仕様なので却下。 Pも挿入後のカーソル位置が気持ち悪いけど仕方ない。

範囲選択を見ながら操作したい場合は下記のヴィジュアルモードを使う。

インサートモード -- INSERT --

キー入力しかしない。 カーソルキーで移動はできるが、基本的にはしないつもりで。

ノーマルモードへの戻り方
esc: 標準だが遠すぎるので却下。
ctrl-[: それなりに押しやすく、escと同じ挙動。
ctrl-c: 最も押しやすいし覚えやすい。 インサートモードでのあらゆる動作を中断して戻るので注意。

ヴィジュアルモード -- VISUAL --

v で始まる範囲選択モード。 Emacsでいうctrl-space

shift-v で行単位選択。 ctrl-v で矩形選択。