Visual C++ 2005 Express Edition (以下 Visual C++, 他も同様) をインストールすると,各 Visual Studio のキーボード操作方法 (キーボード マップ スキーム) を Emacs 風にすることができます。 (例えば Visual C# 単体をインストールしただけでは「既定」しか選択できません。 Visual C++ をインストールすると,Visual C# でも「既定」に加えて テキスト エディタ「Brief」と「Emacs」の操作方法を選択できるようになります)
メニューバー上の「ツール」 → オプション... → 環境 → キーボード → 「次の追加キーボード マップ スキームを適用」で Emacs を選択して「OK」 (下図参照)
図は Visual C# の「オプション」ウィンドウです。 Visual Basic と Visual Web Developer では, ウィンドウ左下の「すべての設定を表示」にチェックをつけて 「キーボード」の項目を表示させます。
C-x 2 による編集画面上下2分割と C-x 1 によるその解除, C-s と C-r による順方向と逆方向のインクリメンタルサーチ, C-/ による Undo など, なかなか忠実に Emacs の操作方法が再現されます。
たしかに細かいところでは相違点も少なくありません。 たとえば,Meta キーの代用として Esc キーは使えず, もっぱら Alt キーシフトを使う必要があります。 C-x 2 で編集画面を三つ以上に分割することはできず, カーソルが置かれているほうの分割画面を閉じる C-x 0 も使えません。 それでも,自分の知る限り, 最近の統合開発環境の Emacs 風スキームのなかでは最も完成度が高いものの一つです。 *1
Emacs と比較したとき,最も目立つ相違点はおそらく C-h の振舞です。 単にキーボード マップ スキームを Emacs にしただけでは, C-h は置換操作のままです。 ここではこれを (Emacs の初期設定ではありませんが,自分を含め Emacs を使う者の間で比較的一般的なカスタマイズの流儀に従って) バックスペースと同じになるように再定義してみます。
なお,置換操作は,Emacs と同じく M-% (Alt と Shift を押しながら 5 を押す) で開始できます。
場合によってはどうしても本物の Emacs を使いたいときがあります。 本節では Visual Studio から,現在のファイルを Meadow で開き, 現在の行番号にカーソルを移動させる方法を説明します。 *2
以下のように設定します。
メニューバー上の「ツール」 → 外部ツール... → 「外部ツール」ダイアログでタイトル: Meadow→ OK (下図参照)
コマンド: C:\cygwin\usr\local\bin\meadow.bat
引数: +$(CurLine) $(ItemPath)
初期ディレクトリ: $(ItemDir)
ここでは,Cygwin のスペルチェッカ aspell 等を利用できるように,
Cygwin で行こう §16.3 で用意した
/usr/local/bin/meadow.bat
をコマンドに指定しています。
設定後, メニューバー上の「ツール」メニューに「Meadow」が現れます。 これを選択すると Meadow が起動します。
Visual Studio で現在のファイルと行番号を指定していないときに Meadow を起動すると,孤立した "+" が引数として渡されます。 その結果,"+" という名前の新規ファイルの編集バッファが開きます。 もしこうなってしまったら, うっかりセーブして "+" という変な名前のファイルを作成してしまわないように, ただちに C-x k でそのバッファを閉じるか, あるいはウィンドウ右上の×ボタンで Meadow 自体を閉じます。
不満が残りますが,さしあたりの解決方法は,
引数を +$(CurLine) $(ItemPath) から単なる $(ItemPath)
に変更して,現在の行番号へのカーソル自動移動をあきらめることです。
Visual Studio と Meadow の両方で同じファイルを編集しているとき,
初期設定では,
Meadow でファイル内容を変更してセーブすると,
いちいち Visual Studio からその変更を反映するか確認を求められます。
「オプション」ウィンドウで右図のように
「環境」→「ドキュメント」→「環境外でのファイルの変更を検出」
の「保存する場合,変更を自動的に読み込む」に
チェックを入れて「OK」すれば,
自動的に Meadow での変更が Visual Studio に反映されるようになります。
*3
Visual C#, Visual Web Developer または Visual C++ でプロジェクトを開くと, 「ソリューション エクスプローラー」にツリー状にソースファイルのアイコンが 整列しています。これをダブルクリックすると内蔵エディタが開きますが, 右クリックするとコンテキストメニューが開きます。 コンテキストメニューには, 「ファイルを開くアプリケーションの選択...」(英語版では "Open With...") という項目があります。 これを選ぶとダイアログが開き,編集に使用するエディタを選択できます。 Visual C# の場合,初期状態で選択肢は下記の六つです。
内蔵エディタに加えて Notepad つまり「メモ帳」という選択肢があることに注意してください。 外部エディタもここから起動できそうだと予想できます。
事実,ダイアログで「追加...」(英語版では "Add...") ボタンを押して, 任意の外部エディタを選択肢に追加できます。 前節と同じように Meadow を起動するには, 「プログラム名」として "C:\cygwin\usr\local\bin\meadow.bat" を 指定します。「表示名」は Meadow などとしましょう。
コンテキストメニューからそのままカスケードメニューで選択肢を選べるのではなく, いちいちダイアログが表示される点は, いま一つ GUI デザインがこなれていない気がしますが, とにかく,ごく手軽な設定で Meadow (あるいは その他の任意のエディタ) を起動できるわけです。 *4
ダイアログ上で選択肢を選んだ状態で「既定値として設定」 (英語版では "Set as Default") ボタンを押すと, ダブルクリックで起動するエディタを変更できます。 Meadow を選択することもできます。
*1 たとえば,Java の統合開発環境のひとつである NetBeans 5.0 も Emacs 風キー操作のオプションを標準装備していますが, 致命的なことに,編集画面の分割が手軽にできません (独自の操作方法で一応は分割可能ですが)。 インクリメンタルサーチも順逆両方向とも可能ですが,その操作感は独自です。 もっとも,自分の理解するところ,NetBeans の意義は, むしろ「箱から出した」そのままの状態で (あれこれプラグインをいれずとも) Swing によるデスクトップ GUI から Tomcat/JSP による動的 Web ページまでの 広範なソフトウェア開発に対し,強力な即戦力として活用できることにあります。 それは Emacs 風キー操作の貧弱さの一点で否定できるものではありません。 環境の整備や作業方法の習熟からデバッグや性能改善まで含めた総合的な 見地からいえば,NetBeans は優れた開発環境です。
*2 本節の内容は Old&New の 秀丸 (ひでまる) との連携 (Visual Studio .NET編) を参考にしました。先達の労苦に感謝します。
*3 「オプション」ウィンドウに書かれている文に意味の分かりづらい箇所がありますが, 誤訳とみて間違いありません。 「環境外でのファイルの変更を検出」,「保存する場合,変更を自動的に読み込む」 は,英語版 Visual Studio 2005 Express ではそれぞれ "Detect when file is changed outside the environment", "Auto-load changes, if saved" です。 後者は「もしも (外部で) セーブされたら,変更を自動的に読み込む」 と訳すべきところでしょう。
*4 統合開発環境はしばしばその閉鎖性,閉塞性が問題視されてきました。 手になじんだエディタが使えないことは,それだけで十分な忌避理由になります。 あちこちにエディタ・ウィンドウを配置して, 編集中のソースを好きなように見ることができなければ, せっかくの大画面モニタも宝の持ち腐れです。 この観点から Visual Studio 2005 の方向性を見ると, 従来 Unix ワークステーションを使ってきたようなトラッドな人々をも 取り込み始めようとしている,と言えるかもしれません。 そのような層にとって関心をひかないであろう Visual Basic での該当項目の欠如, そのような層に普及しているであろう C++ のための環境のインストールによる 内蔵エディタへの Emacs 風スキームの追加も,その傍証としてあげられます。