あちこちをViモードにしていこう

2008年8月21日(木)
萩原 佳明

シェルだってvi

 Linuxの標準シェルであるbashの編集コマンドは、デフォルトではemacs系のコマンド体系になっており、「Ctrl-A」で行頭に戻ったり、「Ctrl-P」で履歴をたどったりすることができる。実はこの編集モードをviにすることができるのだ。

 では早速やってみよう。シェルを起動したら以下を入力する。これだけで、bashがviモードに変更される。

$ set -o vi

 この状態で以下を入力してみよう。

$ ls -l

 これでファイルの一覧が表示される。ここで例えば履歴をたどろうとして、いつものように「Ctrl-P」としても、以下のように表示される。

$ ^P

 viモードになった今は、まず「Escキー」を入力してノーマルモードに移行、続いて「上」を意味する「K」をタイプすることで履歴がたどれる。

バイナリファイルだってvi

 いわゆる「バイナリエディター」もviモードで使うことができる。ただし、これを実現するには専用ソフトウェア「bvi」が必要だ。僕が確認したところ、Debian 4.0(Etch)やGentoo Linuxにはパッケージがあるが、CentOSには入っていなかったので、ここでインストール方法についても説明しておく。インストールは至って簡単だ。

 まずはbviのオフィシャルサイト(http://bvi.sourceforge.net/)のDownloadページから、パッケージを入手しよう。今回は2008年8月6日現在で最新版の「bvi-1.3.2-1.i386.rpm」をダウンロードした。ダウンロードしたら以下を実行する。

$ rpm -Uhv bvi-1.3.2-1.i386.rpm

 これでインストールは完了だ。起動はVimと同様、以下を実行する。

$ bvi /usr/bin/bvi

 大きなファイルの先頭だけを編集したい、というときは以下のようにサイズを指定することができる。

$ bvi -s 1000 CentOS5-s001.vmdk

 あるいは、以下のように編集するアドレスの範囲を指定すれば、「メモリ不足で起動できない」といったことも避けられる。

$ bvi -b 16 -e 256 CentOS5-s001.vmdk

 さて起動した後の操作は基本的にはviと同じだ。あくまでもviと同じであって、Vimほどは多様なコマンドを使えない。また、バイナリファイルを扱うという性質上、デフォルトでは挿入モードは使えず、「A」をタイプして追記モードに入るか、「D」でカーソル位置以降を削除するか、「R」で置換モードに入るか、ということになる。リスクを承知した上で挿入モードに入るときは「:set memmove」とする。

 バイナリ部分を検索するときは「/」や「?」ではなく「\」や「#」を使うなど、バイナリファイルを扱うことによる違いがいくつかあるが、詳しくは上記サイトの「Quick Tutorial」を確認してほしい。

Webブラウザだってvi

 Vimに慣れると、マウスはなるべく使いたくなくなってくるが、そのほかのアプリケーション、例えばWebブラウザを使う場合などはマウスの使用は避けられない。

 そこで紹介するのがVimperatorだ。これはFirefoxをVimモードのキーバインドで操作できるようにするプラグインである。インストールするには、FirefoxでVimperatorのWebサイト(http://vimperator.mozdev.org/)を表示し、Downloadsのところにあるxpiファイルへのリンクをクリックする。するとインストール確認のダイアログが表示されるので、画面に従いインストールし、Firefoxを再起動すれば、インストールは完了だ。

 Firefoxを再起動してまず目につく違いが、メニューバーとツールバーがなくなっていること。これはあくまでもVimモードの操作感を得られるようにという、開発陣のこだわりだが、メニューバー(m)とツールバー(T)が必要な場合は「:set guioptions=mT」で表示させることができる。

 ウインドーのスクロールは「hjkl」だ。「Ctrl-U」や「Ctrl-D」での半ページスクロール、「Ctrl-B」や「Ctrl-F」での1ページスクロールももちろん可能だ。「gg」でページの先頭に移動できるし「G」は最後尾に移動できる。「/」で文字列を検索できるのもVimと同様だ。「d」でカレントのタブを「削除」して、「u」で最後に削除したタブを「復活」できるのは、なるほどと思われるだろう。

 Vimperator特有の操作としては、「H」と「L」が左右移動の関連操作のような扱いになっており、Webブラウザの履歴の前後移動になる。つまり「H」で1つ前のページに戻り、「L」で1つ先に進む。もちろん、数字プレフィックスは有効なので、「10H」と入力すれば10個前に戻ることが可能だ。

 Vimでは上下移動(ノーマルモードの場合)のコマンドである「Ctrl-P」と「Ctrl-N」は、タブの移動に割り当てられている。「ZZ」はVimでは「上書き保存して終了」だが、Vimperatorでは「セッションを保存して終了」になる。つまり、次回起動したときに今まで開いていたウインドーやタブがそのまま開かれるようにして終了、ということが簡単にできる。

 一方、全く異なる役割になっているキーももちろんある。例えば「r」はリロード、「R」はスーパーリロード(キャッシュを無視したリロード)、「B」はバッファ、つまりこの場合はタブのリストを見ることができる。「zi」や「zo」は折り畳み関連のコマンドではなく、ここでは「ズームイン」と「ズームアウト」、つまりページの拡大と縮小に割り当てられている。

マウスにさようなら、それがvi流

 さて、ここで初めてVimを触ったときのことを思い出してほしい。たぶん多くの人は「jとkで移動できるのはわかったけれど、じゃあどうやってjとかkとかを入力するの?」と疑問に思ったのではないかと思う。

 この疑問をVimperatorに当てはめると、「フォームに文字を入力したいときはどうなるの?」とか「もともとのショートカットキーは使えないの?」ということになるだろう。前者は、実はフォームの入力欄をアクティブにしてあげれば(「マウス」で入力欄をクリックすれば)入力可能になるし、入力欄にフォーカスがある間は、もともとのショートカットキーの方が有効になる(例えば「Ctrl-P」は「印刷」)になる。

 しかし、マウスを使って入力欄をアクティブにするのが面倒だったり、一時的にVimperatorの機能をオフにしたいときは「I」をタイプする。これですべての入力がそのままFirefoxに出力できるようになる。

 1回のタイプだけを無視してほしい場合は「Ctrl-V」。これはVimでも「次に入力する文字はそのまま使う」という場合に使うので、それほど違和感はないかもしれない(例えば「。」を全部改行に変換したいときは、「:%s/。/」まで入力したあと「Ctrl-V」をタイプしてからエンターキーを押して「^M」、改行を入力したあと「/g」を入力して、全体として「:%s/。/^M/g」のようにする)。

 そして「あの入力欄をフォーカスしたい」「あのリンクをクリックしたい」という場合は、「f」をタイプする。そうするとページ上にアルファベットが書かれた赤い四角が表示される(図2)。入力欄やリンクが少ない場合は「H」「J」「K」「L」「A」「S」といった1文字の四角、リンクが多いと「JL」、「HJ」、「AH」、「HK」といった2文字の四角が表示される。

 この四角に書かれた文字をタイプすれば、入力欄であればそこにフォーカスできるし、リンクであればそのリンクをたどれる。これで、マウスには手を触れないまま、ブラウジングが可能になるのだ。

 では最後に、Vimに関する衝撃の事実をお伝えする。

Vimはフリーウエアではありません

 Vimの起動画面をきちんと見たことはあるだろうか?そして何回かに1回、「ウガンダの恵まれない子供たちに援助を!」と表示されるのには気がついていただろうか?実はVimは厳密な意味でのフリーウエアではなく、チャリティーウエアなのである(寄付をしなくても使い続けることはできる)。

 では、表示されているヘルプの「:help iccf」を見てみよう。ここに書いてあるように、作者のBram Moolenaarは、ウガンダにある児童養護施設への寄付を推奨している。作者は以前ウガンダにボランティアに行き、そこに存在する問題に関心を抱き(詳しくは「:help kcc」)、また同地で援助活動を行っているKCCの活動内容に共鳴を覚えたそうだ(詳しくは「:help donate」)。

 もう長いことVimを使ってるし、今回はVimの原稿を書いているということで、せっかくなので僕も寄付をしてみることにする。金額は今回の原稿料の半分、1万円にしよう。しかし送金のヘルプ(「:help iccf-donations」)を見ても日本からの送金方法が書いていない。が、どうやらPayPalが使えるようだったので、PayPalに登録後、1万円を送金してみた。

 これで、ようやくVimの起動画面を横目で見ながら「いや、ごめんね」と思わずに済むようになったというわけだ(無料で使ってもよいので「ごめんね」と思う必要はないのだが)。

でもやっぱり難しいな

 全4回ということで解説を行ったが、どうしても駆け足での解説になってしまった。どうだろうか、Vimを使ってみる気になっただろうか。限られたページ数であるため、僕の考える「これは重要かな」「これは便利」というポイントを紹介してきたが、例えばtagsファイルについて説明していなかったり、quickfixやgrepを取り上げられなかったりと、説明不足の点もあるだろう。使ってみて気になった部分は、「:help quickref」を見たり、時間があれば「:help user_manual」でマニュアルを読むなど各自調べてもらいたい。

 しかし、それでもやっぱり難しいとい思う人もいるだろう。そういう人には2つ選択肢がある。まず1つは「Vimを使わない」という方法だ。世の中にはいろいろなソフトがあるので、肌に合わないものを使い続ける必要はまったくない。そしてもう1つがCream(http://cream.sourceforge.net/)という、Vimの拡張ソフトを入れてみることだ。

 このCreamというのは「プルダウンメニューや、キーボードショートカット、拡張可能な編集機能を用いて、Vim初心者により扱いやすくしたり、経験者向けに機能を追加」したソフトで、「Vim自体の拡張性を用いて提供」されたソフトだ。

 名前は「どちらも強さを和らげて上品にし、どちらも単独では役に立たない」ということらしい(引用はいずれもWikipediaのCreamのページ(http://ja.wikipedia.org/wiki/Cream)より)。

 Creamを使うと「Vimでできること」を「Vimでないやり方」で見ることができるので、どうしても敷居が高く感じてしまう人には、慣れるためにはいいかもしれない。ただ、日本語のヘルプがないので、そういう意味では別の敷居があるとも言えるわけなので、VimのGUI版を使う方が良いかもしれない。

 以上、「読んで試して!Vim!」終了である。読んでくれたみなさん、タイトルどおり、ぜひ試してみてください。Vimは、使えば使うほど手になじんでくる、本当に良いソフトなので。

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

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

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

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

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