Vimの基本操作をマスターしよう

2008年8月19日(火)
萩原 佳明

困ったときのヘルプ

 今回はヘルプ、設定ファイル、基本操作について説明していく。

 まずはヘルプについて紹介していこう。ヘルプを表示するには、ノーマルモードで「:」を入力してコマンドモードに入り、「:help」と入力する。なお、以降については基本的にコマンドモードにて操作していることを前提とする。

 「:help」を入力すると、入力画面が横に分割され(分割されたそれぞれを、Vimではウインドーと呼ぶ)、ヘルプファイルが表示される。この画面が、ヘルプ画面だ。基本的な上下左右の動き方(「hjkl」)やヘルプウインドーの閉じ方(「:q」)などの操作が確認できる。

 より具体的なヘルプが必要な場合は、例えば「:help j」と入力すれば「j」を入力したときの動作がわかるし、「:help :help」では「:help」自体のヘルプ、「:help :Explore」では前回紹介した簡易ファイラーについての情報が得られる。

 しかし、このヘルプには大きな問題がある。そう、英語であることだ。英語が苦手な人は日本語化したいところだろう。Vimのヘルプファイルの日本語化は、Windows版のVimが配布されている「KaoriYa.net(http://www.kaoriya.net/)」で行われているので、これを利用しよう。

 KaoriYa.netのWebサイトを開いたら「Vim日本語ドキュメント」というリンクをクリックし、「Vim日本語ドキュメントダウンロード(スナップショット)」からダウンロードする。解凍するとruntimeというディレクトリの中にdocとsyntaxというディレクトリがあるので、Linuxであれば$HOME/.vim/以下に、Windowsであれば$HOME/vimfiles/以下に、それぞれ移動。

 次に、ヘルプファイルを認識させるため、移動したdocディレクトリに対して「:helptags $HOME/.vim/doc/」というコマンドを入力すれば、ヘルプの日本語化が完了だ。

 「$HOMEとは何?」というアナタは「:echo $HOME」と入力。すると、例えば僕の場合は、Linuxだと「/home/hagi」、Windowsだと「C:\Documents and Settings\hagi」と表示される。

 なお、「たまには自己研鑽のために英語で見たい」という気分になった場合などは、「:help :help@en」のように言語名を指定することで表示言語を変更できる。もしくは、「:set helplang=en」と入力すると、一時的にヘルプ言語を変更可能だ。

設定ファイルを見てみよう

 続いて設定ファイルについて説明しよう。まず肝心の設定ファイルはどこにあるのか。早速覚えたヘルプを使って「:help vimrc」と入力してみよう。UNIXでは「$HOME/.vimrc」に、Windwsでは「$HOME/_vimrc」または「$VIM/_vimrc」にあることがわかる。ただし、自分で用意してなければ存在しないので見つからなければファイルを用意しよう。

 ここで「:help vimrc」で参照するように書いてある「vimrc-intro」についても見てみよう。「vimrc-intro」にカーソルを置いて「Ctrl-]」だ。それによれば設定ファイルには「:」で入力できるものは何でも記述できるらしい。

 では、試しに以下の設定を書いてみよう。

set number

 入力したら一度Vimを終了して再起動するか、「:source $HOME/.vimrc」のようにして設定ファイルを読み込む。すると、各行の頭に行番号が表示されるはずだ。続いてこの設定を以下に変更してみよう。

set nonumber

 先ほどと同じく新しい設定を有効にすると、今度は行番号が消える。このようにして設定ファイルを作っていくことができるので、適宜紹介していく。

 ちなみに設定についても、「:help number」と入力すると詳しい説明が表示される。ちなみに「現在デフォルトと違う内容になってるのはどんなオプションか」を見たいときは「:set」で、「とにかくどんなオプションになってるのか」を見たいときは「:set all」を実行する。後者の場合は大量の情報が表示されるので、スペースキーやEnterキー、「hjkl」で上下に移動しながら見ていこう。

 ここまでできたら、次はいよいよVimの基本操作の解説だ。

基本操作

 「第1回:今さらながらのVim!(http://www.thinkit.co.jp/article/123/1/)」で、基本操作についてはチュートリアルを参照するように書いたが、それ以外にも覚えておいた方が良い基本操作があるのでここで簡単に紹介する。なお、基本操作については「:help quickref」で見られるので、必要に応じて目を通すと良いだろう。

 さて、これは心構え的な話であるが、誰でもいろんなことを一度に覚えるのは無理なので、ここに書かれたことやquickrefに書かれていることは、「気になったものを1個か2個覚えて日常的に試してみる」というのがオススメだ。あと、肌に合わなければそのコマンドについてはとりあえず忘れちゃうというのも良い方法。本当に便利な機能なら、たぶんきっとまたどこかで出会えるはずだ。で、それを繰り返す。

 では早速紹介に入ろう。とりあえず基本中の基本操作については図2の上に示したので、実際に操作しながら試してみよう。

移動のための操作

 さて、ここからがVimの面白いところだ。図2にもあるように「jkhl」による上下左右だけではなく、さまざまな移動の仕方がある。また、指定した回数だけ移動を繰り返す、といった操作もできる。

 「0」で行頭に、「^」でインデントされた行頭にそれぞれ移動(つまり前者はインデントを無視して常に行頭に行く)。「$」でその行の最後尾、「gg」でファイルの先頭に、「G」でファイルの最後尾に。「10G」で10行目に、「20G」で20行目に、つまり「NG」でN行目に(Nは数字)移動できる。「w」と「b」では、単語単位で、それぞれ前後に移動可能。そして例えば「10w」で「10単語分先」に進み、「100b」で「100単語分前に」戻れる。ちなみにこの数字でのプレフィックスで回数を指定するのは、いろんなコマンドで可能なので試してみると良い。

 画面をスクロールするときは「Ctrl-D」(半画面分下に)、「Ctrl-U」(半画面分上に )、「Ctrl-F」(1画面分下に)、「Ctrl-B」(1画面分上に)という感じ。1行ずつスクロールしたいときは「Ctrl-E」と「Ctrl-Y」が使える。

 画面をスクロールせずにカーソルだけを移動したいときもあって、「H」で画面先頭、「L」で画面末尾、「M」で画面中央にカーソルを移動できる。逆に「いまカーソルがある場所を画面中央にしたい」という時には「zz」。「上書き保存して終了」の「ZZ」と間違えないように。画面先頭と画面末尾の場合は、それぞれ「zt」と「zb」である。

 移動の操作は図2の下にまとめた。これでずいぶん「思ったところ」に行けるようになったのではないだろうか。

 次は移動以外の基本操作をいくつか紹介していこう。

入力方式と検索

 挿入モードに入るとき、「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にまとめた。字面で追ってると複雑に見えるかもしれないが、慣れればあまり考えずにできるようになるはずだ。

 今回はヘルプと設定ファイル、基本操作について紹介した。次回はもう少しターゲットをしぼって、プログラムを書くときに便利な機能を紹介する予定だ。よろしくどうぞ。

1973年佐賀県生まれ。東京大学文科I類中退。株式会社アスキーで3年半ほど編集者生活を送った後に独立し、(有)プラスワンデジタルを設立。Webサイトの企画・運営やサーバ管理、プログラム作成などを担当。著書に「日本のSEはこれからどうなるのか」「これならわかる不正アクセス対策 入門の入門」(いずれも翔泳社)がある。http://www.p1d.com/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています