ショートカットコマンドとキーワードベース入力支援

最近Emacs上で過ごす時間が増えていて,少しずつショートカットコマンドを憶えていこうと努力しています.といっても残りの時間はWindowsのキーバインドで過ごすので,しばらくギャップに苦しみそうです.
一般的なショートカットコマンドは修飾キーと文字キーの組み合わせという形態を採っています.問題はこの文字キーの選ばれ方で,特定の単語の頭文字だったりASCIIコードに由来していたりと統一性がありません.例えばUNIXではCtrl-aはカーソルキーを行頭に移動という意味で用いられることが多く,これは恐らくaheadに由来しているのでしょう.しかしMacintoshのcommand-aやWindowsのCtrl-aは全選択で用いられ,これはallの略と考えられます.初心者にとってこのaが単語の頭文字であることがどの程度役に立っているのかは疑問です.*1
他方,EmacsのAbbrevsモードというのも初めて試してみました.これはあらかじめ設定された略語が入力されると自動的に展開してくれるというモードです.この場合トリガーとなるのはキーワードなので,少なくともショートカットコマンドよりは印象に残りやすいと感じました.
さて,キーワードで思い出すのがVisualStudio 2005のIntellisenseです,既にβ版をお使いの方はご存知でしょうが,次期VisualStudioではIntellisenseが非常に強化されています.私はまだVisual C# 2005 のβ版しかテストしていませんが,言語予約語の補完とコード生成機能だけでも十分に移行する価値があると判断しています.
http://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=8725
試してみて感じたのはoverrideやnewなどのキーワードが効果的な割り込みポイントとして働いていることで,積極的な入力支援を受けられるのならプログラミング言語にキーワードを増やした方が全体の入力効率が上がっているような気がします.例えばJavaにはoverrideというキーワードが無いため,かえって便利な割り込みポイントを失っているとなるわけです*2
キーワードベースの入力支援は,憶えにくいショートカットコマンドと比べて緩やかに導入が可能です.もちろん全ての文字入力でキーワードベースの処理が有効なわけではありません*3が,プログラミングという作業には非常に相性が良いものです.このように入力支援の方式まで吟味した超高速プログラミング言語(環境)というのも,いい差別化になるのではないでしょうかね?

*1:この対極にあってコマンドを文字列で入力させるのがEmacsの「M-x コマンド名」やVisualStudioの「コマンド ウィンドウ」でしょう.

*2:といってもIntellisenseはカーソル位置のコンテキストも利用していて,キーワードのみに頼っているわけではありません.コンテキストの利用はJavaでも有効でしょうから,キーワードの不在が直ちにビハインドになるとは限らないでしょう.Intellisenseの裏側についてはDaigoHさんのIntellisense Testing が興味深いです.

*3:Wordの入力支援(SmartTag)が鬱陶しがられる背景を考えていると,むしろ有効な場面の方が少ないのかもしれませんが……