on outline processing, writing, and human activities for nature
5. キーバインディング
5-a. Key bindings, key bindings, key bindings
Emacs を使う人たちは、ショートカットキーをキーバインディングとよびます。
バインドは英語の bind で、結びつけるという意味の動詞。プログラミング関係では割り当てるという動詞として使われているようです。ですから key bindings はキーをある機能をもつコマンドに割り当てるという意味をもっていると、考えています。
そして、なぜショートカットと呼ばないのかというと、現在のたとえば macOS やその前の Macintosh OS のショートカットが生まれる前から Emacs とそのコミュニティが存在し、その人たちがキーバインディングということばを使っていたことが関係していると、ぼくは予想しています。
Emacs を使いはじめて最初におどろくのは、このキーバインディングの多さです。たとえば、以下のサイトをみてください。これは Emacs キーバインディングのチートシート (カンニングシート) みたいなものです。
たくさんありますね。でも、これがすべてではなく、もっとたくさんのキーバインディングがあります。Emacs では Emacs のもつ機能を本人に質問できるので、ぼくの Emacs にいくつキーバインディングがあるのか教えてもらいました。
具体的なたずね方ですが、以下のコードを入力中のバッファー (窓のことです) のどこかにかき、その行末にカーソルを置いたままC-x C-e
(control キーを押しながら x と e のキーを押す) とタイプします。
(length global-map)
すると画面いちばん下にある1行の窓、エコーエリアに数字がでます。これが、あなたの Emacs がもっているキーバインディングの数です。
ぼくの Emacs からは199個、という返事がありました。これは global-map、つまりグローバルなキーバインディングのリストに含まれる数ですから、特定の mode などだけで使えるキーバインディングが別にもあります。
これだけたくさんの選択肢があれば、マウスやトラックパッドなどのポインティングデバイスを使わず、キーボードの操作だけでかなりのことができそうですね。
自分が頻繁につかうキーバインディングをマッスルメモリーし、キー操作だけで文章やコードをかいたり、その編集をしたりする作業を進めるという使い方は、Emacs を使う醍醐味のひとつです。
5-b. 覚えやすいキーバインディング8つ
Emacs のキーバインディングをつかいはじめるための情報として、まず、多くの人がよく使い、覚えやすいとされるキーバインディングを紹介しましょう。これらはすべて、機能の名前のイニシャルをつかっています。
カーソルを先 (forward) へすすめたいときのキーバインディングには「f」が割り当てられています。
C-f
M-f
カーソルを何かの終わり (end) に移動させる場合は「e」が割り当てられています。
C-e
M-e
削除 (killing) する機能は「k」です。
C-k
M-k
そして、カーソル直後のテキストと直前のテキストを入れ替える (transposing) 機能には「t」が割り当てられています。
C-t
M-t
C-
は control キーを押しながら、そしてM-
は esc を押してから離し、アルファベットキーを押す作業を示しています。そして、ここに挙げた8つのキーバインディングをマッスルメモリするだけでも、文章やコードをかくときに便利になること請け合いです。小さく人生が変わります (笑)。
5-c. キーバインディングを探検する
キーバインディングの一部を覚えたいとき、キーバインディング全体をざっとでも眺めておきたいと思ったとき、ぼくはまず、最初に紹介したチートシート「GNU Emacs Reference Card」を見ることにしています。
ある機能を使うキーバインドが思い出せないときにカンニングペーパーをみるような気もちで、このサイトを見直すワケです。
よくつかうものって人によってちがうことが多いですから、キーバインディングをとにかく全部みておきたいというあなたには、グローバルなキーバインディングを網羅したリストを呼び出すコマンドがあります。
M-x describe-bindings
グローバル・キーバインディングすべてを整理し、解説も加えたサイトもあります。時間のあるときに眺めておくと、無限にも感じるキーバインディングたちが頭の中で少しだけ、手に負えるような気もちになります。
そして、そして..。C-h k
で特定のキーバインディングの機能をしらべることもできるのですが、これがおもしろい。
たとえばC-e
についてしらべたいときはC-h k C-e
とタイプすると、Spacemacs の場合は画面の下半分に新しいバッファ (赤枠の部分) が開き、このC-e
の説明が現われます (赤枠はぼくがあとからつけたものです)。
キーバインディングの機能の説明は、赤枠バッファ内5行目、カーソルが置かれた行にあります。
最初の2行もえいやと日本語にすると:
C-e
は、コマンドのorg-end-of-line
を実行するそして、説明の「org.el」をクリックすると、org.el ファイルのこの関数をかいてある場所へジャンプします。図の上側のバッファ (窓) は、この関数を定義しているコードの一部です。
で、あたり前なんですが、そのコードをながめたり写経したりして、先人たちがどうやってカーソルを行末へジャンプする機能を実装したのか、直接学ぶこともできますし、無謀にも (?) そのコードをかき換えることもできてしまう (恐いですね.. 笑)。
これこそが Emacs というテキストエディタ以上のテキストエディタの醍醐味の入り口なのだと、ぼくは理解しています。
5-d. キーバインディングを少し変える
Emacs にあらかじめ用意されたキーバインディングの雰囲気をつかんだら、自分がよくつかう操作を自分の指とキーボードに合った〈カタチ〉に変えるのも、Emacs ならではの愉しみです。
自分に合った自分だけの Emacs を目指しているあなたは、もしかすると最初から10個か20個、あるいはもっとたくさんのキーバインディングを自分用に「カスタマイズ」したくなるかもしれません。
でもぼくは、先人たちの想いをちょっとだけ尊重することにして、キーバインディングを変えるのはほんの少しだけにしています。Emacs の長い歴史の中で整備されてきたキーバインディングは、ぼくが考える以上にうまい具合にキーを割り当てていることが多いと感じていて、それをまずは学んでおきたいという気もちがあるワケです。
*
キーバインディングを変更する機能を備えた関数は複数あります。ここでは、ぼくがよくつかっているbind-key
というコマンドを紹介します。
このコマンドをつかう場合、たとえば、2節で紹介したある項目にフォーカス (narrowing) する機能org-narrow-to-subtree
をC-n
に割り当てるとき、次のようにかきます。
(bind-key "C-n" 'org-narrow-to-subtree)
最初にbind-key
、つぎが割り当て先になるキーのC-n
、そして割り当て元の関数org-narrow-to-subtree
、という順番です。
Spacemacs の場合、これを設定ファイル configuration file である .spacemacs
のどこかにかけばいいはず。では、どこにかけばいいでしょう?
前節を思い出してください。そう、どこにかけばいいか迷ったときはとりあえずuser-config
にかくのでしたね。
図の赤枠の中が、キーバインディングを変えるためのコードです。かんたんに説明しておくと:
C-r
: 文字を置換するC-n
: 特定の項目内にフォーカス narrowing するC-p
: フォーカスを外すC-t
: 項目内のデータをすべてコピーするC-o
: 指定範囲内の改行記号を削除する前節にもかきましたが、M-m f e R
とタイプすれば Emacs を再起動せずに.spacemacs
をよみ直すことができます。
さぁ、これであなたの Emacs はあなたのキーバインディングで操作できるようになります。
*
そして、最後にひとつ。
上のキーバインディングの5つ目、C-o
で実行されるコマンドdelete-linebreaks
は、このとおりにかいてもあなたの Emacs では動かないはず。なぜなら、ぼくがつくったコマンドだからです。
で、次回はいよいよ、小さな関数をつくる方法を短く紹介します。