本記事では「毎回は使わないけど、知っていると便利な vi の機能」について備忘録として残していこうと思います。
はじめに
vi にはコマンドモードと入力モードがある。
現在がどちらのモードか迷ったら [esc] を押してコマンドモードに戻ってから作業を再開すること。
入力モードとコマンドモードの切り替え
コマンドモード へ切り替え
[esc] # コマンドモードへ切り替え
入力モード へ切り替え
i # 現在のカーソル位置 から入力 insert
a # 現在のカーソル位置の後ろから入力 after
o # (小文字)現在のカーソル位置の行の 次 の行から入力
O # (大文字)現在のカーソル位置の行の 前 の行から入力
コマンドモードの操作
画面に行番号の表示
:set number # 行番号の表示
:se nu # 行番号の表示(省略版)
カーソル移動(行内移動)
^ # 現在の行の 行頭 へ移動(空白がある場合、先頭文字まで移動)
0 # 現在の行の 行頭 へ移動(空白がある場合でも先頭まで移動)
$ # 現在の行の 行末 へ移動
fa # 現在の位置から行末に向けて最初に登場する a まで移動(find の f ?)
fh # 現在の位置から行末に向けて最初に登場する h まで移動(find の f ?)
fr # 現在の位置から行末に向けて最初に登場する r まで移動(find の f ?)
カーソル移動(行移動)
:1 # 1行目に移動
:50 # 50行目に移動
:88 # 88行目に移動
:$ # 最終行に移動
検索
/hogehoge # 現在のカーソル位置から末尾に向かって文字列 hogehoge を検索
?hogehoge # 現在のカーソル位置から先頭に向かって文字列 hogehoge を検索
# 次の検索結果に行くには [n]
# 前の検索結果に行くには [Shift] + [n]
画面移動
[ctrl] + [f] # ファイル末尾に向かって1画面スクロールする forword
[ctrl] + [b] # ファイル先頭に向かって1画面スクロールする back
削除
x # 現在のカーソル位置の文字を削除
3x # 現在のカーソル位置から3文字を削除
dd # 現在のカーソル位置の行 を削除(切り取り)
5dd # 現在のカーソル位置の行から5行を削除(切り取り)
コピー & 貼り付け
yy # 1行コピー
3yy # 3行コピー
p # (小文字)カーソル行の下に貼り付け
P # (大文字)カーソル行の上に貼り付け
元に戻す・やり直し
u # 最後に実行した編集の取り消し(元に戻す)
. # 最後に実行した編集の繰り返し(やり直し)
保存・終了
# w:(write)編集中のメモリの内容をファイルに保存
# q:(quit)メモリ上の編集データをすべてファイルに書きこみしてあれば終了
:w # 保存
:w! # 保存(強制)
:q # 終了
:q! # 終了(強制)
:wq # 保存して終了
:wq! # 保存して終了(強制)