ヘッダファイルなどをVimのキー操作一発で探すいまさら聞けないVim(9)(1/3 ページ)

前回に続き、Vimが備えるプログラマ向けの便利な機能を紹介します。今回の内容をマスターすれば、プログラミングに関する操作のほとんどをVimから出せるようになります。(編集部)

» 2011年12月20日 00時00分 公開
[後藤大地@IT]

プログラミングにかかわる操作はすべてVimから

 ある程度Vimが使えるようになっても、マニュアルは別のターミナルで開いてしまうとか、ビルドや実行は別のターミナルから実行するといった癖を持っている方は少なくないだろう。操作法には好みがあるので、どれが良い、どれが悪いということはないが、Vimを使っているのであれば、なるべくVimですべての作業を完結させるようにしてしまいたい。その方が確実に作業効率は上がる。

 先月からシステムコールの連載が始まっているということもあるので、しばらくはVimでC言語プログラミングをするという状況を想定した使い方を紹介していこうと思う。

 C言語でプログラムを作るとき、プログラマはいくつかの決まった操作以外はほとんどしないということが多い。例えば、使いたいと考えている関数のマニュアルが読む、ヘッダファイルに指定されているファイルの中身を読む、特定の型や関数を定義している部分を読むなどといったところだろう。

 これはC言語に限らないことだが、結局のところプログラミングとは、マニュアルやソースコードを読みながら自分の求める処理を記述していく作業といえる。このような作業のために、別のターミナルを開くのは少々効率が悪い。

 大きなスクリーンをデュアル構成で使っているなど、デスクトップが十分に広い環境があるならそうした方が便利だ。tmux(1)screen(1)といった疑似ターミナルソフトウェアを利用すれば、ショートカットで複数のターミナルの間を行き来できるし、そういった操作が簡単にできるターミナルアプリケーションもある。

 これが、画面が狭く解像度が低いノートPCなどになると話が変わる。こういう場合は、限られたスペースをいかに有効活用するかが効率アップのポイントとなる。今回は、狭い画面を想定して、プログラミング中に必要な指示をVimから出す方法を紹介する。なお、作業環境は前回構築したPC-BSDやUbuntuが仮想環境で動作していることを想定する。

カーソルの下の単語からマニュアルを引く

 基本的な操作方法から解説しよう。1つ目は、カーソルの下にある単語を検索キーワードにしてマニュアルを引く方法を覚えておきたい。いちいち別のターミナルへフォーカスを移動させてからman(1)コマンドを実行するようなことは避けたい。

 作業用にCのソースコードをコピーしてVimで開いてみよう。例えばcat(1)のソースコードをカレントディレクトリへコピーして次のようにVimを実行する。

cp /usr/src/bin/cat/cat.c ./
vim cat.c

 調べたい単語までカーソルを移動させたら、ノーマルモードにして[Shift]キーを押しながら「k」キーを押す(図1)。

図1 マニュアルで調べたいワードへカーソルを移動。検索でジャンプする方法が簡単。ここで[Shift]キーを押しながら「k」キーを押す。クリックすると拡大 図1 マニュアルで調べたいワードへカーソルを移動。検索でジャンプする方法が簡単。ここで[Shift]キーを押しながら「k」キーを押す。クリックすると拡大

 こうすると、その対象となる単語を引数としてman(1)コマンドを実行でき、結果がターミナルに現れる(図2)。マニュアルの画面はノーマルモードで「:q」とすれば終了する。これは何かと便利なので、まず覚えてしまいたい。

図2 fcloseの上で[Shift]キーを押しながら「k」キーを押したのでfclose(3)のマニュアルが表示される。クリックすると拡大 図2 fcloseの上で[Shift]キーを押しながら「k」キーを押したのでfclose(3)のマニュアルが表示される。クリックすると拡大

 UNIXのオンラインマニュアルをよく見ると、見出しが同じ単語になっているマニュアルが存在する。例えば、ライブラリ関数のgetopt(3)を調べたいと思って検索しても期待通りの結果にならないことがある(図3)。

図3 ライブラリ関数のgetopt(3)を調べようとして、その単語の上で[Shift]キーを押しながら「k」キーを押す。クリックすると拡大 図3 ライブラリ関数のgetopt(3)を調べようとして、その単語の上で[Shift]キーを押しながら「k」キーを押す。クリックすると拡大

 [Shift]キー+「k」キーで検索すると、マニュアルの先頭から検索して、一致するマニュアルを表示するので、どうしても一般コマンドがヒットしやすくなる。先のgetoptの例なら、一般コマンドのgetopt(1)のマニュアルが出てきてしまうということがあるのだ(図4)。

図4 複数のマニュアルがヒットする場合、最もセクション番号が小さいものを表示する。クリックすると拡大 図4 複数のマニュアルがヒットする場合、最もセクション番号が小さいものを表示する。クリックすると拡大

先にセクション番号を指定する

 FreeBSD/PC-BSDのマニュアルは、表1に示すセクション番号で分類してある。getopt(1)やgetopt(3)のような表記になるのは、どのセクションに所属しているのかを示しているのだ。この番号がないとコマンドの話をしているのか、ライブラリ関数の話をしているのか分からなくなってしまうので、UNIX系のドキュメントでは文脈から意味がはっきりしている場合を除いて、セクション番号付きで表記するのが普通だ。

セクション番号 内容
1 一般コマンドマニュアル
2 システムコールマニュアル
3 ライブラリ関数マニュアル
4 カーネルインターフェイス
5 ファイルフォーマットマニュアル
6 ゲームマニュアル
7 そのほかのマニュアル
8 システム管理者向けマニュアル
9 カーネル開発者向けマニュアル
表1 FreeBSD/PC-BSDのマニュアルのセクション番号と、それぞれの内容

 先ほどの例は、ライブラリ関数のgetopt(3)について調べたいという場面だった。こういう時はgetoptの上にカーソルを移動させ、「3」と押してから、[Shift]キーを押しながら「k」を押すのだ。これで図5のようにgetopt(3)のマニュアルを読める。

図5 先にセクション番号を押せば、そのセクションにある該当するマニュアルを読める。クリックすると拡大 図5 先にセクション番号を押せば、そのセクションにある該当するマニュアルを読める。クリックすると拡大

 プログラミングをしていれば、関数のマニュアルは何度も読むことになるだろう。プログラマなら、この短縮キーは絶対に覚えておきたい。この方法はC言語に限らず、シェルスクリプトのプログラミングでも利用できる。別ターミナルでコマンドのマニュアルを調べる必要がなく、Vimから直接マニュアルを参照できるのだ。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。