How IT Works

プログラマーやっています。技術よりも人間学的なところが好きです。

Emacsを使い始めての感想

前書き

 1か月ほど前から本格的にEmacsを使い始めました。

 何か1つくらいエディターを極めたいなぁという願望はずっと持っていて、ちょいちょいVimを触ったりはしていました。

 しかし、Pythonを入れないと解決しない問題に遭遇した際に、もともとVim scriptを好きになれなかったのもあって、手放してしまいました。特にバージョン絡みの問題だったので、さすがにそこまで環境を汚すのはあんまり。。という気持ちでした。

 加えて、Lisp系の言語で遊びたいという従来の目的をするにしてもVImはあんまり有効でないこともあったので、それならEmacsのほうがいいだろうと考えて乗り換えました。

 いざとなれば、Spacemacsに乗り換えればいいという保険もあったので、気軽な気持ちで使い始めました。

github.com

やったこと

VsCodeEmacsのキーマップを入れる

 業務ではTypeScript+Angularを使っていたので、エディターは相性のいいVSCodeを使っていました。

 いきなりEmacsに移るのは難しかったので、キーマップをEmacsにしてキーバインドを覚える練習をしました。

Emacs Friendly Keymap - Visual Studio Marketplace

 最初はMキーとCキーの使い分けがまったくできず、移動にC-fとか二つのキーを使うのは逆に面倒じゃないかと思いながら、ひたすら耐えていました。

 1週間くらいで基本操作ができるようになり、2、3週間でC-a、C-k、C-yという連続技が使えるようになり、やっと楽しいと思える瞬間がたまに来ました。

 そのころにはEmacsの環境が大体できたので、Emacsに乗り換えました。

本を買って勉強

 いろいろEmacsの本を買いあさって、どんな風にするのがよいのかという情報を集めていました。

 特によかったものを選べといわれると、普通ではありますが、下の2冊でしょうか。

入門 GNU Emacs 第3版
入門 GNU Emacs 第3版
posted with amazlet at 18.02.10
Debra Cameron James Elliott Marc Loy Eric Raymond Bill Rosenblatt
オライリー・ジャパン
売り上げランキング: 326,673

 ただ、どちらも悪くはないにせよ、Vimで言うところの「実践Vim」みたいな「これさえ読んでおけば大丈夫!」というものはない印象ですね。

 結局、Webの断片の情報をかき集めながら進んでいくというスタイルをとらざるを得ず、入り口があるようでない感じがしました。

 入門者にとってはあんまり優しい環境とは言えないかもしれないですね。

カスタマイズを始めた

 いろいろやったので、あんまりまとめて書くのは難しいですが、

  • デフォルトの変数をいじくった
    • 行数表示とかハイライトとかテーマとか
  • キーバインドの変更
    • 特に削除系のキーバインドとバッファー操作系を変えました
    • あとは C-c k とC-c C-kとかを間違えやすいやつを書き替えました
  • プラグイン導入
    • 大体el-getで入れました
      • これはたいそう便利でした
  • diredとかorg-modeとか既存機能で遊ぶ

 カスタマイズの楽さにはびっくりしました。新しいコマンドの定義とか、キーバインドの変更、プライグイン導入どれもパパっとできたので、思いついたらいじくれるのは最高です。

評価

欠点

キーバインドが使いにくい

 前にも書きましたが、キーバインドになれるのはなかなかつらいものがあります。

 そういうものだと割り切ればいいのですが、Vimに慣れているとちょっと不合理じゃないかというキーバインドがデフォルトで多すぎます。

 割り当てられている関数も微妙に使いづらいものが多い(特にカット関係)印象がありました。

Emacs Lispが絶妙に使いづらい

 正規表現エスケープとか、ダイナミックスコープがデフォルトであることとか、基本のAPIが地味に貧弱であるとか書いていて、時たまいらいらすることがありました。

 Common LispとかClojureとかに慣れていると、感覚がずれてしまうこともあり、結構はまりやすいですね。Lisp一族といえど違いはそれなりに感じました。

静的言語だとIDEにできて、Emacsにできないことが多い

 そんなに静的言語を触ったわけではないのですが、C#とTypeScriptに関していうとリファクタリング、ビルド、あるいは補完という面で他のエディタと同等に持っていくのはつらいかなという感じがしました。

 それにここらへんはIDEを使う人が多いため、情報もそんなにないという点で苦労しています。

 Clojureとかの動的な言語で書いているとそこまで気になるレベルではないですかね。

長所

カスタマイズが容易

 気に入らなければ変えてしまえばいいという思想なので、短所で書いたキーバインドEmacs Lispの問題は自力で解決できます。

 それがいいか悪いかという話はありますが、気になった瞬間手を動かして試せるのは個人的には面白いと感じます。

情報量が多い

 他のエディタよりも歴史があるので、自分が苦痛に感じることは大抵解決済みです。そういう意味、いろんな知識を使いやすく、やはりハックする余地がとても広いような印象を受けました。

総評

 正直に言うとハックが好きな人でなければ、そこまでメリットは大きくないという印象を受けました。

 ロードマップがあるわけでもないですし、最近のIntelliJ IDEAを超える機能性を提供できるかというと、かなり頑張らないと厳しいでしょう。

 ただ、プログラム言語が好きな人やエディタ自体を愛する人にとっては遊び道具としてはとても優れていると思います。

 気が向いたらscratchを開いてアイデアを試したり、他の人のEmacs Lispを読んで遊んだりできます。何より、気になれば直せばいい自由は何よりもありがたいと思います。

 自分はもっと深く、深くエディタ自体に没入して遊びたいので、しばらくはEmacsで行こうかなと考えています。Spacemacsはもう少し素のEmacsで遊んでから試してみるかもしれないです。

github.com