Vim というテキストエディタを使い始めた [1, 2]。今のぼくの Vim の見方を短くまとめると、指先が静かにキーボードの上を滑りつづけるうちに、文章作品ができあがるソフトウェア。
コマンドはできるだけひとつのキーストロークで、ホームポジションにおいた指は極力そのままに。あるタスク実行に必要なコマンドが5つなら、その命令実行に必要な指先の動きも、なめらかな軌跡を描く配置と順番に。
たとえば、今カーソルのある位置から7つ目のテキストユニット (文節ごとに改行したテキストなら1文節がひとつのユニット) まで選択、改行記号を削除し、ひとつのセンテンスやパラグラフとしてまとめるタスクなら、“V7jgJ” と5文字タイプする (V は範囲設定などのモードへの切り替え、7j は7ユニット下へ移動、そして gJ は改行コードを削除というコマンド)。矢印キーまで右手を移動しなくていいし、マウスやトラックパッド操作のためにキーボードから手を離すなんて、とんでもない。
これを禅と呼ぶ人もいる [3]。大げさな気もするけど (そう言ってる人たちもたぶん半分冗談)、Vim を使うごとに、何かを考えさせられることも確かだ。では Vim の禅マスターは、そのデザインをとおして、何を問いかけているのだろうか。
ぼくはまだ門前の小僧だけど、その小僧の答えを披露しておくと「頭の中にある考えを文章で表現する作業を、滑らかにする技術とはナンゾヤ?」である。
頭の中のことを滑らかな形で文字にする技術とは、手書きの場合なら、たとえば万年筆のペン先の硬さや形、書いている紙の質。コンピュータでタイプする場合なら、キーボードの配置やキーの形状、キーストロークの硬さや聞こえてくる音などハードウェアのデザイン。ソフトウェアで考えるなら、キーストロークに対するカーソルの反応速度や、画面の配置や色の組合せにタイポグラフィのような技術。
そして Vim の禅マスターが問いかけてくるのは、その中でもとくに「文章の編集作業を滑らかにする技術とはナンゾヤ」という公案だろうか。たとえば繰り返しおこなう、カーソルの移動や文字やセンテンスの切り貼り、そのための検索など、文章という作品をつくるとき避けてとおれない作業の潤滑油になるような技とは、どのようなものか。
文章作品をつくるプロセスは、均一ではない。ぼくは今のところ、つぎのような大きな3つのプロセスに分け、その役割を意識しながら作業することが効果的だと考えている [4]。
序盤。頭に浮かんだ言葉やセンテンス、あるいはアウトラインなどアイディアの断片を文字という記号で記録する。これまで蓄積したアイディアの断片を開いたり、タイトルのリストを眺めたりすることも、ここに含まれる。そして、それらをベースに、とにかく一通りの下書きをつくったり、仮のアウトラインを枠組みにして、本文を埋めていったりする段階。
中盤。リライティング、もしくは書いたものの解体 (解析といってもいい) と再構築。序盤でつくった下書きにアウトラインを入れたり、仮のアウトラインをつくりなおしたり、あるいは、アウトラインをみながら本文を修正したり。仮のアウトラインを忘れる作業 [5] もここに入る。つまり、論理構造の編集作業である。書く作業をとおして新しいものが生まれる経験は、この論理の編集をとおしてのことが多い。
そして終盤。論理構造の編集に目処がたったら、形式の編集に移る。ただしその前半は、中身をともなった形式の編集を進める。最終的に公開したい形のかなづかい、タイポグラフィやレイアウトにつくり上げたあと、論理構造の編集も行なう。ここで始めて、論理の飛躍にきづくことも多い。個人的には、ここから中盤のリライティングにもどることもよくある。
終盤の終盤は、形式の編集作業に集中したい。テキストの内容と、タイポグラフィやレイアウト、それぞれから伝わるメッセージに違和感はないか。これらの組合せから、いかに相乗効果を生み出すか、もっとよい表現形式はないか、といったことに気を配る。そう「神は細部に宿る」のだ。
そして Vim はこの終盤の形式編集の作業を、いわゆる文章だけでなく html や LaTeX なども含んだテキストコード編集までを、滑らかに進めるデザインというか、その哲学が、ほんとにすばらしい。
文章の中を行から行へ、センテンスからセンテンスへ、単語から単語へ、高速で移動し、文章や飾りつけのためのコードの切り張りを、速やかに実行できる。繰り返し行うタスクを記憶することも、自然にできるようになる。
さあ、そしてここで、アウトライナーに思いを馳せよう。アウトライナーを設計した人たちが磨きをかけてきた (磨きをかけるべき)、アウトライナーならではの技とは何か。
言うまでもなくそれは中盤の、論理構造の編集を滑らかにする技術。少なくともアウトライナーを、テキストの論理構造をツリー構造として可視化し自由に編集するための道具とみる限り、これは自明なことである (同様に、もしあなたがアウトライナーを仮のアウトラインづくりや、アウトラインの形式をもつ文書出力の編集道具と考えているのなら、それは論理編集の道具ではなく、序盤や終盤のアウトライン型テキストに限定した形式編集の道具になる)。
では、Vim の禅デザインが論理の編集に必要ないかと言えば、そうでもない。Vim を修行している最中、この機能が、文章のツリー構造の中を自由に飛び回るのに適したデザインではないかと、何度も思った。論理の枝から枝へ、あるいは枝から幹、幹から枝へ、最小限の指の動きで自由に移動し、文節やセンテンス、あるいはセンテンスのグループを自由に持ち運びできれば、論理の編集ももっと滑らかになるのではないか。
たとえば自分のいるノードから目的の上位階層まで、わずかなキーストロークでフォーカスの範囲をジャンプして広げる機能。あるいは n 回前にフォーカスしていた範囲と今フォーカスしている範囲を、ひとつのキーストロークでいったりきたりできる機能。
そしてたとえば、行などの通し番号だけでなく、ツリーの中の枝や幹の位置をしめす座標をごくシンプルな数字と文字の組み合わせであらわせば、枝から枝へのジャンプや、自分の思う範囲の枝や幹などへのフォーカス範囲の移動がかんたんになるかも知れない。
そうそう、項目内の文字を入力したり削除したりする「項目内 (文字単位) の編集モード (項目内にカーソルが点滅する状態)」と、項目を単位にインデントしたり移動したりする「項目間 (項目単位) の編集モード (項目が選択され、ある色に反転した状態)」を、ひとつのキーストロークで切り替える機能もほしい。
最後に、Vim 禅マスターからの問いにもどろう。
頭の中にある考えを文章で表現する作業を、滑らかにする技術とはナンゾヤ?
門前小僧の答え。
テキストの樹の中を自在に飛びまわる技デアル。
論理の枝から枝へカーソルを移動したり、枝から幹へフォーカスの範囲を変化させたり、希望する文節やパラグラフなどを選択して移動先へもち運んだりする作業を、少ない労力で実現するソフトウェアのデザインは、文章づくりの終盤だけでなく、中盤、つまり書かれたものを解体し、再構築を潤滑にする技術のひとつである。
Vim もおもしろいけれど、今もっとおもしろいと感じているのは、今のアウトライナーを使って、論理の樹の中をジャンプしながら樹の形を思うがままに編集する機能をどれくらい実現できるのか、Vim の禅にこだわらずに試す作業である。