今回も前回に続いて古くから使われているエディタviの操作について説明します。前回は最低限viが操作できればよいというものだけを説明しました。最低限のことだけでも簡単な用途であれば十分用に足りると思いますが、最低限だけの操作では、いろいろと編集に手間がかかってしまいます。viには便利な編集機能がいくつも用意されていますので、それらについて説明していきます。
今回もこれまでのようにサンプルで利用するファイル・ディレクトリはデスクトップのsampleディレクトリとしています。デスクトップにsampleディレクトリがない場合は作成しておいてください。(コマンド入力ならmkdir ~/Desktop/sampleとして作成することができます)
なお、前回と同様の注意事項ですがキーボードのcaps lockはオンになっていないものとします。これはviでは大文字と小文字でのキー入力結果が異なるというのが1つと、macOSではshiftキーと英文字キーを押した場合の動作がUNIX/Windowsと異なるためです。
文字の追加
前回は文字の挿入でノーマルモードでiのキーを押すというのを説明しました。iだとカーソルの前に文字が入力されますが、カーソルの後に文字を追加することもできます。この場合、ノーマルモードでaのキーを押します。appendのaというように覚えてもよいでしょう。ちなみにiはinsertのiと覚えればよいでしょう。
削除
入力モードでdeleteキーを何度も押して文字・行を削除することもできますが、100行消すとなると大変です。ここらへんviは簡単に処理することができます。
行を手軽に削除するには、escキーを押してノーマルモードにします。
まず、カーソルがある一行だけ消すにはddと入力します。
dd
もしカーソルがある行が消えないようであればescキーを押してからddと連続してdのキーを2回押してください。うまくいかない場合は文字入力モードが日本語になっている可能性があります。英語入力モードになっているか確認してください。
次に複数行をまとめて削除してみましょう。カーソルがある行を含めて以後の行を消す場合、消したい行数を示す数値を入れてからdのキーを一回だけ押します。例えばカーソルがある行を含めて3行分削除するなら3ddと入力します。
3dd
カーソル位置にある行だけを削除するにはほどddと入力しましたが、1ddと入力しても同じ事になります。先ほどと同様に1ddと入力すると行が削除されます。
1dd
プログラミングや原稿入力時に便利なのがカーソル位置から行末まで削除する場合です。shiftキーを押してからdキー(大文字のD)を押します。
すべての内容を一括して手軽に削除することもできます。まず、escキーを押してからコマンドモードにしてから:キーを押します。次に%dと入力しリターンキーを押せばすべての内容が削除されます。
%d
ノーマルモードでなくコマンドモードでは、もう少し便利な削除が可能です。escキーを押してから:キーを押してコマンドモードにします。コマンドモードにしたら
開始行,終了行d
という形式で削除範囲を指定しリターンキーを押します。例えば以下のようにすると2行目から6行目までが削除されます。
2,6d
カーソル位置から最終行まで削除する場合はコマンドモードで以下のように入力しリターンキーを押します。
.,$d
アンドゥとリドゥ
あっ!間違って削除してしまった!という場合でも大丈夫です。viでは取り消し(アンドゥ)ができます。
取り消しをするにはノーマルモードでuのキーを押します。
viのアンドゥはヒストリー(履歴)タイプなので押せば押すほど前の状態に戻っていきます。
アンドゥし過ぎた場合でも大丈夫です。元に戻す(リドゥ)ことができるからです。リドゥはcontrolキーとrキーを押します。
アンドゥもリドゥも戻したい履歴数を入力してからキーを押せば(u,controlキーとr)、指定した履歴分だけ戻すことができます。
例えば以下のように3uとすれば3つ前まで戻ることができます。
全体の先頭、末尾
全体の先頭に移動するにはノーマルモードでggとキーを押します。
全体の最後に移動するにはshiftキーを押したままgキー(大文字のG)を押します。
ページ移動
viでは画面に表示されている範囲を1ページとしています(viに限らずlessなど多くのページ処理コマンドもそうですが)。現在のページから次のページに移動するにはノーマルモードでcontrolキーを押したままfキーを押します。
逆に前のページに移動するにはcontrolキーを押したままbキーを押します。
行頭移動・行末移動
カーソルを行頭に移動する場合はノーマルモードで^と入力します。
カーソルを全体の最後の行末の先頭に移動する場合はノーマルモードで$キーを押します。
インデント・字下げ(タブ)
viはノーマルモードで>キーを2回押すとタブが挿入されます。実際に挿入されるのはタブコード(ASCIIコードの9)です。
ただ、今の時代、本当のタブコードを挿入するのはありがたくない場合もあります。場合によってはタブコードではなく空白4つを入れて欲しいこともあります。また、プログラム言語のPythonのようにインデントの深さが重要な意味を持つこともあります。
そんな場合、タブを空白何文字分にするかをviでは設定できます。escキーを押してから:キーを押しコマンドモードにしてから以下のように入力します。
set shiftwidth=4
その後に>>と入力しインデントをつけるとタブコードではなく半角空白4つ分でインデントされます。逆にインデントを削除したい場合は<<と入力します。ちなみに4<<とするとカーソル位置から4行分まとめてインデントを変更できます。
インデントは以下のようにvまたはVキーを押してビジュアルモードにしてから処理した方がわかりやすいでしょう。ビジュアルモードともう少し便利なviの使い方については次回説明します。
著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。