Linux系OSを操作していて一番初めに戸惑うのが「viエディタ」の独特の操作方法だと思われます。
人によっては慣れれば離れられないらしいのですが、正直、私は未だにこの独特の操作感に慣れる気がしません・・・。
ある程度の期間触っていないと、すぐ忘れてしまいそうなので基本操作についてまとめておこうと思います。
viエディタの初期操作
| コマンド | 説明 |
| :set nu | 行番号を表示 |
| :set nonu | 行番号を非表示 |
| |
| :set ts=タブ幅 | タブ幅を数値で指定 |
コマンド入力モードからテキスト入力モードへの切り替え
| コマンド | 説明 |
| Esc | テキストモードからコマンド入力モードへの切り替え |
| i | カーソルの直前からテキスト入力 |
| I | カーソルの行頭からテキスト入力 |
| a | カーソルの次の位置からテキスト入力 |
| A | カーソルの行末からテキスト入力 |
| o | カレント行の下に空白行を挿入し、そこからテキスト入力 |
| O | カレント行の上に空白行を挿入し、そこからテキスト入力 |
viのカーソル(画面)操作
| コマンド | 説明 |
| h | カーソルを1文字左に移動(←キーと同様) |
| j | カーソルを1文字下に移動(↓キーと同様) |
| k | カーソルを1文字上に移動(↑キーと同様) |
| l(小文字のエル) | カーソルを1文字右に移動(→キーと同様) |
| 0(ゼロ)、^ | カーソルを行頭へ移動 |
| $ | カーソルを行末へ移動 |
| H | 表示画面の先頭行の行頭へ移動 |
| M | 表示画面の中央行の行頭へ移動 |
| L | 表示画面の最終行の行頭へ移動 |
| G | ファイルの最終行へ移動 |
| nH | カーソルを画面内の先頭行からn行目へ移動 |
| nL | カーソルを画面内の最終行からn行手前の行へ移動 |
nG、
:n、
:n + Enter | ファイルのn行目へ移動 |
| b | カーソルを前の単語の先頭へ移動(句読点も含む) |
| w | カーソルを次の単語の先頭へ移動(句読点も含む) |
| e | カーソルを単語の末尾へ移動(句読点も含む) |
| B | カーソルを前の単語の先頭へ移動(句読点は無視) |
| W | カーソルを次の単語の先頭へ移動(句読点は無視) |
| E | カーソルを単語の末尾へ移動(句読点は無視) |
| ( | カーソルを前の文の先頭へ移動
|
| ) | カーソルを次の文の先頭へ移動 |
| { | カーソルを前の段落の先頭へ移動 |
| } | カーソルを次の段落の先頭へ移動 |
| % | カーソル位置の括弧に対応する括弧へ移動 |
| Ctrl + f | 前方へ1画面分スクロールする |
| Ctrl + b | 後方へ1画面分スクロールする |
| Ctrl + d | 前方へ1/2画面分スクロールする |
| Ctrl + u | 後方へ1/2画面分スクロールする |
viの検索コマンド
| コマンド | 説明 |
| fx | カーソルと同一行にある次の文字xを検索する |
| Fx | カーソルと同一行にある前の文字xを検索する |
| /regex + Enter | 文字列regexにマッチするカーソル以降の文字列を検索(前方検索) |
| ?regex + Enter | 文字列regexにマッチするカーソル以前の文字列を検索(後方検索) |
| / + Enter | 前方検索を継続 |
| ? + Enter | 後方検索を継続 |
| n | 前回と同じ方向へ検索を継続 |
| N | 前回と逆方向へ検索を継続 |
文字列置換関連のコマンド
| コマンド | 説明 |
| ~(チルダ) | 大文字⇔小文字変換 |
| c + カーソル移動コマンド | 動作としては「d + カーソル移動コマンド」と同様だが、コマンド入力後にテキスト入力モードへ切り替わる |
| cc、S | 動作としては「ddコマンド」と同様だが、コマンド入力後にテキスト入力モードへ切り替わる |
| C | 動作としては「Dコマンド」と同様だが、コマンド入力後にテキスト入力モードへ切り替わる |
| r | カーソル位置の1文字を書き換える。書き換え後はコマンド入力モードに戻る |
| s | カーソル位置の1文字を書き換える。書き換え後はテキスト入力モードのまま |
| R | カーソル位置以降の文字列を書き換える |
| :s/regex/string | カーソルと同一行にある次の文字列regexをstringへ置換 |
| :s/regex/string/g | カーソルと同一行にある文字列regexをstringへ全て置換 |
| :m,ns/regex/string | m行目からn行目の間の文字列regexをstringへ全て置換 |
| :%s/regex/string | ファイル内の文字列regexをstringへ全て置換 |