読者です 読者をやめる 読者になる 読者になる

キーバインドは覚えるな!(emacs)

TDDBCでもEmacsユーザがいたので、自分のEmacsに対する考え方を述べる。

キーバインドを覚える?

最近、Emacs始めました!とか言う人が増えて嬉しいのだが、それに伴いこういう発言をする人が増えた。

キーバインドを覚えよう!」
チートシートキーバインドを暗記しています。」

とか言う人がいる。ちゃんとEmacsを使おうと思えば思うほどこういう人がいるのかもしれない。

だが、キーバインドを覚えるのはハッキリ言って無駄だ!
そもそも、キーバインドは自分やりたいように設定するものだ!と僕は言いたい。



Emacsのコマンドを覚えよ!

つまり、Emacsのコマンドを覚えて、好きなようにキーバインドするべきなのだ!
Emacsのコマンドを覚えることが、Emacsの機能を把握することだと僕は思っている。

Emacsの拡張するのも、コマンドを創ることにしかすぎない。そもそも、EmacsのコマンドはEmacs Lispの関数なのだ。

つまりEmacsのコマンドを覚えることは、Emacs Lispの関数を覚えることなのだ。だからEmacsをあなたが使った時点で、Emacs Lispへの入り口が開かれるのだ。

Emacs Lispはそこまで難しくない。だから、Emacsを使う人たちは是非ともEmacs Lispに挑戦してほしい。



Emacsは使いやすくすることが出来る、それはあなた次第だ!

Emacsは使いにくい?いやいや、それはEmacsのせいではない。あなたの責任なのだ。
Meta-fで、forward-wordが押しにくい?押しやすいキーバインドにすればいいじゃないか?

ちなみに僕はMeta-fにイライラしていたことがあった。それをどうやって解決したかを示そう。

forward-wordは1単語カーソル前へ移動をするEmacsコマンドだ。僕は1単語カーソル移動はそれなりに利用するが、MacのJISキーボードのoptionキーはとても押しづらいものであった。

だから、押しやすいキーバインドは何かを考えた。
結論として、\C-w\C-fとなった。なぜなら、1単語(word)を進ませるのだから、\C-wが良いだろうと思ったからだ。

そして、設定ファイルにこう記述した。

(global-set-key "\C-w\C-f" 'forward-word) ;; エラー

だが。エラーが出た。\C-wはkill-regionが先にバインドされていたからだ。とりあえず、思い切ってバインドを外した。

(global-set-key "\C-w" 'nil)
(global-set-key "\C-w\C-f" 'forward-word)

バインドを外したら、その機能が使えなくなってしまうと不安になるかもしれない。だが、その心配はない、いざというときは、M-x コマンド名をすればいい。

つまり、キーバインドを外してもEmacsの機能は使えなくなることは無いということだ。

実は、僕はC-wのkill-regionにも不満を抱いていたから、このまま利用している。よく,間違って\C-wを押して、ソース切り取られるのが嫌だったのだ。だから\C-wは無効のままにしておいた。

だが、kill-regionも意外に結構つかうのだ。だから結局こうなった。

(global-set-key "\C-w" 'nil)
(global-set-key "\C-w\C-f" 'forward-word)
(global-set-key "\C-w\C-k" 'kill-region)

これで、直ぐにkill-regionが使えるようになった。




Emacsはエディタビルダだ!

僕は、何もカスタマイズされてないEmacsは不完全なエディタだと思う。

Emacsはオレオレエディタを創るためのツールだと思っている。

初心者は最初、C-f, C-b, C-n, C-pのカーソル移動を教わる。けれども、カーソル移動をそうしないと行けない訳ではない

もしも、あなたがVimmerだったとしよう。そのときvimライクなキーバインドEmacsを創ることも可能なのだ。Emacsはそれを許容するのだ。


つまり、目線を変えてほしい。Emacsはエディタではなく、エディタを創るためのものだ!
それが一番いいたいことだ。