2. 動きまわる

2.1. w, e, および b のキーストローク

ファイルの中を動きまわるにはw, e そして b といったキーが使えます。VIMでは C 言語 のプログラムにある様々なトークンが識別できます。

以下のような C のコードを考えてみます。

Figure 1. C プログラムの一部

カーソルが if 文の先頭の位置にあるとします。 w を一回押すとカーソルが最初の (にジャンプ します。もう一度 w をタイプすると、そのカーソルは NULL に移ります。その次はカーソルが == トークンに移動するでしょう。それ以降の キーストロークでは、次のように移動します。 x... )... &&... y... >... z... そして最後に )... です。

ew と似ていますが、現在 カーソルがある場所の言葉の最後に移るのであって、その次の言葉の最初 には移らない点だけが違います。

bwとは正反対で、 カーソルは逆方向に動きます。だから b のキーストロークを使えば後ろ向きに移動できます。

2.2. {, }, [[ と ]] のキーストローク

{} は段落から段落へと 移動するのに使います。 C 言語を編集している時には、これらの キーは意味が若干違ってきます。 C 言語では段落というのを 空行で分けられた行の塊だと見なすのです。

Figure 2. もう一つの C プログラムの一部

上の例では段落が二つ現れています。ある段落から別の段落へは 簡単に移動できます。{} というキーを使えばいいのです。{ はカーソルが 段落を追って上の方に移動していき、}はカーソル が段落を追って下の方に移動していきます。

人にはそれぞれコーディングスタイルがあり、ステートメントの 論理的な集まりを、一つ以上の空行で分けて分類しています。

Figure 3. 別の C プログラムの一部

{} キーはこういった状況 では非常に役立つものです。ある「段落」から別の段落へととても 簡単に移動できるのです。

役に立つもう一つ別のキーの組が[[]] のキーです。これらのキーを使うと 最初の桁にある直前の { やあるいは次の { にジャンプできます。

Figure 4. C のコードの次の一部

foo() を編集していたとして、今度は bar() を編集したいとしましょう。 ここで単に ]] とタイプしてください。すると カーソルは bar() 関数の左括弧 "{" に移るはずです。逆方向は 若干違ってきます。bar() の中ほどにいたとして、[[ とタイプすると、カーソルは最初の "{" 、つまり bar() 自身の最初、 に移動するのです。 foo() の最初に移るにはもう一度 [[ とタイプしなければなりません。でも何回もキーを打つ代わりに、 2[[ とタイプすれば、最少のキーストロークで カーソルを直前の関数の最初にもっていけるのです。

同じようなキーストロークの、もう一つ別の組が ][[] です。][ だとカーソルは 最初の桁にある、次の } に移ります。 foo() を編集していたとして foo() の最後に行きたいとします。その場合は ][ でそこに行けます。同様に、bar() の編集中に foo() の最後に行きたい 場合は、[] がカーソルをそこにもっていきます。

キーストロークの覚え方ですが、分けて考えればいいのです。最初の キーストロークは上がるか下がるかを示しています。 [が上がりで、 ] が下がりです。 次のキーストロークは一致する括弧のタイプを示しています。直前の キーストロークと同じならカーソルは { に移動するはずでしょうし、 キーストロークが違えば、カーソルは } に移動するでしょう。

]], ][, [[ および [] のキーストロークで注意することは、 これらが最初の桁にある括弧と一致すると いうことです。もし最初の桁にあるかどうかに関係なく、上方向や 下方向にある括弧すべてを見つけたいとしても、それはできません。 でもVIMのドキュメントには回避策が書かれています。全ての括弧を 見つけるにはキーストロークをマップしなければなりません。 マッピングの時間を節約する、お奨めのマッピングは次のとおりです。

:map [[ ?{<CTRL-VCTRL-M>w99[{

:map ][ /}<CTRL-VCTRL-M>b99]}

:map ]] j0[[%/{<CTRL-VCTRL-M>

:map [] k$][%?}<CTRL-VCTRL-M>

2.3. % キーストローク

% はカーソルのところにあるものに一致するものを 見つけるのに使います。カーソルのところにあるものは、小括弧でも、 中括弧、大括弧でもかまいません。% キーを押せば、カーソルは対応 する一致した括弧へジャンプするでしょう。

数ある中でも、% キーストロークは #if, #ifdef, #else #elif および #endif と一致するものを見つける のに使えます。

このキーストロークは他人が書いたコードを確認する際に非常に 役立つものです。

Figure 5. 次の C のコードの一部

上記のコードをチェックする場合には括弧が正しいこともチェック します。% はある括弧から(対応する括弧まで) ジャンプするのに使えます。その逆も同じです。このように、どの 左括弧がどの右括弧に対応するのかを見つけたり、その情報を使って コードを確認するのに使うのです。

同じように、% はある { から対応する } にジャンプ するのにも使えます。