Vimの基本操作をマスターしよう
入力方式と検索
挿入モードに入るとき、「i」を入力するとその場から入力することになり、「a」を入力すると次の文字から入力できるようになる。つまり、前者は「insert」で後者は「append」の意味だ。
ほかにも、次の行から入力できるようになる「o」、前の行から入力できるようになる「O」もある。
「この行をやりなおしたい」という場合は「S」で現在入力している行が先頭から削除され、挿入モードに入る。「C」だと現在カーソルがある位置以降が削除され、挿入モードに入る。
また「3cw」とやると、「3単語を消してから挿入モードに」という動きになる。「w」は移動のときに出てきた「w」だ。このように組み合わせて操作できる。僕がよく使うのは、数字プレフィックスなしの「cw」で、「その単語変更」ができる。
文字列を検索したいときは、/に続けて文字列を入力する。検索文字列の確定はEnterキーだ。ちなみにこの文字列検索は正規表現も使える。例えば「/[^;]$」で「;」で終わってない行末を検索する。検索後、「n」で次のヒット位置に、「p」で前のヒット位置に移動できる。
置換したいときは、例えばファイル全体が対象ならば「:%s/foo/bar/g」のようにする。「%」が「ファイル全体」、「s」が置換という意味だ。置換の「g」オプションは「1行の中にあるすべての対象を置換」ということ。
「置換したいのは一部だけ」という場合は、「V」で行単位のビジュアルモードに入って置換対象を選択したあと、「:s」と入力すれば良い。自動的に「:'s」とコマンドラインに表示され、「行単位ビジュアルモードでの選択範囲」が操作対象になる(もちろん置換以外でもこのやり方は有効)。なお、「:%s/foo/bar/gc」のように「c」オプションを付ければ、置換対象ごとに本当に置換するかどうか確認する。
ほかにも「t」を使った簡易的な文字検索もできる。例えば「ta」で、その行にあるカーソルの「次のa」の前にカーソルが移動する(「T」で逆方向に検索。ちなみにVimでは、こういう風に大文字にするとちょっと意味が変わるものが多い)。また「次のa」ではなく「2個目のa」を検索する場合は、「2ta」と入力すれば良い。
もう1つ、よく使うのが「*」と「#」による検索で、これは「カーソルがある位置の単語を検索」という機能。「*」でファイル後方に向かって検索、「#」で同じく前方に向かって検索する。
「いまここにあるこの文字を置換したい」という場合はノーマルモードで「r」。そうすると一時的に置換モードに入るので、置換したい文字を入力する。すると文字が置き替わる。例えば「bar」の「b」の上で「r」を押して置換モードに入り、「f」を押すと「b」が「f」に置換されたあとノーマルモードに戻る(最終的に「far」になる)。一時的じゃなく置換モードに入りたいときは「R」だ。これで、カーソルの下の文字が置換されていく。
大文字と小文字の切り替えを行いたいときは「~」を使う。例えば「abCDEfgHiJKl」とある行の「a」の上にカーソルを持って行った上で「~」を押していくと、「ABcdeFGhIjkL」と変換されていくわけだ。一気にやりたい場合はビジュアルモードで対象となる文字列を選択後に「~」を入力。なお、ビジュアルモードで選択後に「U」を押すと、全部大文字になる。ただノーマルモードで「U」を入力すると、「その行に対して行った操作をアンドゥー」という、「u」の親類のような結果になるのでご注意を。
さて、続いては、図1のような素敵な変換ができる「レコーディング機能」について紹介する。
レコーディング機能
そして今回紹介する最後の機能が「レコーディング機能」。ノーマルモードで「qa」としてみよう。画面下に「記録中」と表示されるはずだ。これで以降行う操作はすべて記録され、再生して同じ操作を繰り返し使えるようになる。レコーディング中に再度「q」を押すとレコーディングを終了する。「@a」でいま記録したものを再生できる(ちなみにここに出てくる「a」はレジスタという記録対象のことで「qb」「qZ」「q8」なども使えて、それぞれ「@b」「@Z」「@8」で再生できる)。
さて、このときうれしいのが「e」や「$」などの「抽象的な意味」を持つ機能が使えること。つまり「2文字右に行って3文字カットしてそれを次の行にペースト」のような操作や、「行頭まで移動したら2単語分右に移動して行末までをカットして次の行のスペースの前にペースト」というような操作が記録できる。
ある文字列を別の文字列に法則的に変換するための操作を図3にまとめた。字面で追ってると複雑に見えるかもしれないが、慣れればあまり考えずにできるようになるはずだ。
今回はヘルプと設定ファイル、基本操作について紹介した。次回はもう少しターゲットをしぼって、プログラムを書くときに便利な機能を紹介する予定だ。よろしくどうぞ。