UNIX/Linux及びシェルで使うエディタといえば数ありますが、軽量で有事の際にも使える可能性が高いvi/vimは覚えておくにこしたことはありません。
わかっちゃいるけど面倒くさい、とりあえず3分で使えるvi/vim Step2講座。
前のページUNIX/Linux 3分で使えるvi/vim Step1の続きです。
vi/vimは、カーソル移動が一風変わっていて4つの文字キーを使います。
| k | ||
|---|---|---|
| h | l | |
| j | 
| ↑ | ||
|---|---|---|
| ← | → | |
| ↓ | 
カーソル移動は、(他のモードなら[Esc]を押した)編集モード状態の時、キーボードの矢印キーに相当するのが[h][j][k][l](エル)キーでそれぞれ[左]、[下]、[上]、[右]となっていて右手で操作することが想定([f]と[j]に左右の人差し指をのせたホームポジションで使うことを前提と)されています。
ページ先頭 ← {
あいうえお
↑ ↑
0   $
ページ末尾 ← }
ページ先頭への移動は { 、ページ末尾への移動は } 、段落ごとの移動は[Shift]+ { で上の段落へ、[Shift]+ } で下の段落へ、行の先頭への移動は数字の[0]、行末への移動は[$]であり、これらも編集モードで行います。
各種編集作業ももちろん編集ですから編集モードで行コピーは[yy]または[Y]、行削除は[dd]または行先頭で[D]、カーソル行の後ろの行へのペーストは[p]、前の行へのペーストは[P]、カーソル行の前に空行を挿入するには[O]、後ろに挿入は[o](それぞれアルファベットのオー)です。
文字の削除は[x]、削除に限らず、やり直しは[u]です。
| 操作 | 用途 | キー | 
|---|---|---|
| 移動 | ページ先頭 | { | 
| ページ末尾 | } | |
| 上の段落 | Shift + { | |
| 下の段落 | Shift + } | |
| 行頭 | 0 (ゼロ) | |
| 行末 | $ | |
| 上 | k | |
| 下 | j | |
| 左 | h | |
| 右 | l (エル) | |
| 行コピー | 行コピー | yy または Y | 
| 文字コピー | 単一文字コピー | yl | 
| (同上)複数文字コピー | (n) y l / nは文字数 | |
| 範囲コピー | カーソル位置から行頭 | y0 (ゼロ) | 
| カーソル位置から行末 | y$ | |
| 削除 | カレント行の改行(行連結) | J | 
| 行 | dd | |
| カーソル位置から行頭 | d0 (ゼロ) | |
| カーソル位置から行末 | D d$ | |
| カーソル位置の文字 | x dl | |
| (同上)複数文字 | (n) x (n) d l / nは文字数 | |
| 一文字前 | X dh | |
| ペースト/貼り付け | 行の上 | P | 
| 行の下 | p | |
| カーソル位置 | p | |
| 追加 | カーソル位置の直後に追加 | a | 
| 行末に追加 | A | |
| 挿入 | 空行挿入/行の上 | O (オー) | 
| 空行挿入/行の下 | o | |
| カーソル位置に文字挿入 | i | |
| 行先頭に文字挿入 | I | |
| 前回の行先頭挿入位置 | g I | |
| 前回挿入位置の1つ後ろ (複数行可) | g i | |
| 置換挿入 | カーソル位置 | s cl | 
| 複数行 | S cc | |
| カーソル位置から行末 | C | |
| 連続置換 | R [Enter]で順次置換 | |
| 仮想連続置換 画面上のみ | g R [Enter]で順次置換 | 
コピー、削除、やり直し他いくつかのコマンドは、複数文字、複数行、複数回の場合は直前に数字[0-9]キーを押し、例えばカーソル行を含む3行をコピーしたい場合には[3yy]や[3Y]とします。
vi/vimでは、more/lessなどのページャコマンドやmanコマンド等と同様、編集中のテキストファイル内の検索機能として編集モードから:(コロン)を入力してコマンドモードに切り替えて後ろから前へ検索(前方一致検索)、または、前から後ろへ検索(後方一致検索)することができるようになっています。
: ? キーワード 前方一致検索(ページ末尾から先頭に向かって検索)
: / キーワード 後方一致検索(ページ先頭から末尾に向かって検索)
コマンドモードから前方一致検索はクエスチョンマーク(疑問符)?1つ、後方一致検索はスラッシュ1つ/を入力して、それぞれキーワードを入力してEnterキーを押すとページ末尾、ページ先頭から1つめのキーワードの1文字めにカーソルが移動、点滅し、続けて次を検索するにはn(next)キーを入力します。
vi/vimには上記以外のキー操作やコマンドが、まだまだ数え切れないくらいありますが、全て把握して使っている人はいても数える程度でしょうし、上記くらい知っていれば、まず普段の編集に困ることはないでしょう。
全く触れていないものの1つにコマンドモードで利用できる単純な検索、sedコマンドを使った検索置換などもあります。
: 1,$ s/abc//g ← 1行めから最終行の範囲にあるabcを全て削除
また少なくともシェルにbashを選んだ場合、その入力方法をviモードとemacsモードから選択でき(set -o vi/set -o emacs)、デフォルトはemacsモードです。
viモードにはコマンドライン入力においても編集モード/入力モードの2つの切り替えがあるので注意が必要です。
viモードの場合、コマンドライン上で変更した直後は入力モードですが、その後[Esc]キーを押した場合には、編集モードに切り替わりますし、.bashrcや.bash_prifileなど設定ファイルでviにセットしてターミナルやターミナルエミュレータを立ち上げた場合、初期状態はviエディタ同様編集モードです。
いずれにしても入力以外の編集は編集モードでないとできませんから編集モードを使い、入力する場合には[i]キーで入力モード、挿入するなら[a]キーで挿入モード、コマンド入力なら[:]キーでコマンドモード、入力モードや挿入モード、コマンドモードから編集モードへの切り替えには[Esc]キーを使います。
vi/vimは文字コード設定、ファイルエンコーディング設定、更にはファイルエンコード方式を自動認識でき、それぞれ予め設定ファイルに記述しておいたり、vi/vim編集中に設定することができ、環境変数や各種設定ファイルなどshellを含めた各種言語設定と併せて設定しておくことにより、文字化けもなく日本語を正しく認識、編集、表示することができます。