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を含めた各種言語設定と併せて設定しておくことにより、文字化けもなく日本語を正しく認識、編集、表示することができます。