EmacserがVimに飛び移ろうとして諦め, Spacemacsに着地した話

Spacemacsの解説記事ではありません. タイトル通りのポエムです. 生産性の向上を期待しないでください. 

# あらまし : キーバインドのはなし

自分はEmacs使いです. 自分でゴリゴリチューニングして環境自体には満足していました. しかしかねてから気になっていたことがありました. キーバインドです. 

「VimのほうがEmacsよりも優れたキーバインドを持っている」という論調はよく見かけますが, **その逆はおもしろいほど見かけません.** いやマジで. 限りなくゼロに近いと言って良いかと. 

もちろんEmacsをまともに使っている人でキーマップを全く変更せずに使っている人は皆無だと思います. それでもやはり基本というものはあって,`C-f C-b C-n C-p`や`C-x C-s`などの基本となるキーを変更している人は少ないでしょう. Vimmerのよくある主張である「Ctrl/Alt押しながら...なんてありえない！」から解き放たれたEmacserは居ないでしょう. 闇堕ちしたユーザーを除いては...

どうにもVimに入信した面々は一様に口を揃えて「Vim最高！」と叫ぶ風潮がある. これは果たして単なるトレンドなのか, それともマジなのか. 確かめたくなったのでVimに浮気してみることにしました. 

いやいや, あくまで浮気ですよ. 心中するつもりはありません.

# よもやま話
個人的な話です. スルーして頂いて構いません. いやそんなこと言ったらこの記事自体スルーしても構わないことになりますが.

## その1 : あるOLのはなし(私のことではありません) 

> あるところにひとりのOLがいました.
> 
> そのOLの会社のお偉いさんは60をとうに過ぎた年配の方で, PCが全く使えない人でした.
> 
> そのお偉いさんから降りてくる資料はすべて手書きの紙媒体なので, 部署ではそれをデジタル化する作業がいつも付きまとってきます. 
> 
> そんな業務に追われているときにお偉いさんはやってきて, 部署を見渡してこう言いました.
> 
> 「パソコンなんか使ってるからお前らはダメなんだよ」

こういう大人にならないためにはどうすればいいでしょうか？ 僕は「古いものに拘泥せず新しいものを勉強する」のがいいのかなと思いました. 我々にとってパソコンは使えて当たり前の道具ですが, 年配の方にとっては「勉強」というモチベーションをもってしないと習得できない類のモノでしょう. 自分もこれからどんどん年齢を重ねていきますが, 常に新しいことを勉強する気持ちを忘れないでいたいものです. つまり何を言いたいのかというと, Vimの浮気もその一環だということです.

え？ Vimも古いって？


## その2 : Emacsのキーストロークについての弁明

Vimmerさんに「覚えにくい」だの「長い」だの批判されまくってるEmacsのキーストロークですが, 自分は言うほどヤバいものではないと考えてます.

まず「覚えにくい」ですが, **覚えてしまえば関係ありません.** 各エディタをそこそこ使いこなしている人はキーバインドを思い出しながら編集しているのではなく, 体に染み付いているのです. 染み付いてしまえば「ペーストは`p`, アンドゥは`u`. 覚えやすくね？」には意味がなくなります. Emacserには`C-f C-b C-n C-p`のカーソル移動が当たり前のごとく身についています. キーが遠いとか, もはやどうでもいい話です. 確かに初学者に優しいかどうかはわかりません. でもモードという概念がそもそも初学者に優しいものではないのでどっこいどっこいだと思います. 

次に「キーストロークが長い」ですが, これはある程度受け入れざるを得ません. 矩形選択した範囲を置換するのは`C-x r t`ですが, さすがに冗長すぎると思います. 全部左手. でもこれだってキーバインドを変更すればいいだけです. **Emacsはカスタマイズこそ正義. 聖域など存在しない.** その極致が`Evil`なのでしょう. ただひとつ言わせて頂きたい. 

**`C-x C-s`なんてワンストロークです.** 


# 結論

結局, 完全にVimに移行するのは難しいと判断しました. え, あの, いや, 最初からEmacsに戻ってくるつもりでしたよ？ 

理由はプラグインです. EmacsにあるものはだいたいVimにもあるだろうと思っていて, 実際そうなのでしょうが, 替えの利かないものがいくつかありました. 


## Helm

僕のEmacs生活を根底から変えてくれた子です. ファイル・バッファ・文字列...Emacsで扱うありとあらゆるものを統一的な優れたインターフェイスでインクリメンタルに検索できるようになります. 最初はとっつきにくい印象を受けましたが, [とあるドキュメント](https://tuhdo.github.io/helm-intro.html) を読んで勉強したところすごい子であることがわかりました. 拙い日本語訳を書いたので興味があれば是非:

[初心者〜初級者のためのEmacs-Helm事始め : 前編](http://qiita.com/jabberwocky0139/items/86df1d3108e147c69e2c) 
[初心者〜初級者のためのEmacs-Helm事始め : 後編](http://qiita.com/jabberwocky0139/items/a45cc82d9efd0cb6fd8e)

自分がよく使ってるのは
-   `helm-find-files`
-   `helm-for-files`
-   `helm-swoop`
-   `helm-semantic-or-imenu`
-   `helm-apropos`
でしょうか. 特に`helm-swoop`は異様に便利です. 

Vimmerさんは「`unite.vim`あるじゃん」と思われるかもですが, helmと同じような使用感にするための設定はいかにも大変そうです.


## pdf-tools

Emacsは画像表示に対応しており, それを応用してPDFを表示することができます. つまり, LaTeXを書いてタイプセットしたものをEmacs上で閲覧できるのです. synctexを使えば便利さ倍増. Vimでは難しいでしょう. 

PDFくらい別ツールで表示すれば...と思うかもしれませんが, 引きこもりこそがEmacsの文化であり美徳であると声を大にして主張したい. そして, その考え方が自分には取り返しのつかないレベルで染み付いているのでした.


## Org-mode

Emacs純正のアウトラインプロセッサ. メモ書きやらスケジューリングやら表計算やらなんでもできる子. まさにEmacs文化を体現しておられます. さらに書いたドキュメントをMarkdownやらHTMLやらLaTeX(PDF)やらいろんなものに変換できます. GithubのREADMEもorgに対応しています. ビバ！Org引きこもり！


# 天はSpacemacsに二物を与えた

結局Vimで生活するのは無理でしたが, Vimキーバインドは試してみたい. Evilもいいのですが, テキスト編集以外のキーバインドがどうなるのかがよくわからないので心配. ということでSpacemacsをはじめてみることにしました. 彼は「Emacs + Vim = 最強」を掲げたイケメンプロジェクトです. 土台がEmacsで, デフォルトのキーバインドはVim. Emacsの無骨な外見を捨て去りかっこよくなってます. イケメンは正義.

実は以前に触ったことがあるのですが, レイヤーの仕組みがよくわからず挫折しました. 原因はEmacsの設定をそのままSpacemacsに持ち込もうとしてレイヤーの設定と衝突して？？？になってしまったことです. 今回はVimキーバインドを試すつもりなので設定はほぼデフォルトのままにしました. 

さてプラグインなのですが, ここからがヤバい. **自分が過去に使っていた必須とも言えるプラグインのほぼすべてがデフォルトで入っていた.** いやコレは凄いことです. `helm` や `flycheck` が入ってるのは想定内として, `pdf-tools` があったのはビビった. 導入に随分苦労したプラグインだったんだけどなあ...追加で入れたのは `migemo` くらいなもんです. Spacemacsはイケメンかつ有能だった. 

かつその大量にあるデフォルトプラグインの中には, 便利ツールだけでなく見目を麗しくするタイプのプラグイン(``spaceline`` ``org-bullets``など)も多く含まれています. イケメンに隙無し. 

さらにほぼすべての機能にSpaceキーを起点にしてアクセスできます. つまるところ `which-key` なのですが, Vimキーバインドにマッチした良い設計になっています. デフォルトでほぼ完成されていると言ってもよい.

かくしてSpacemacsに着地したのでした. 


# で, 結局？

肝心のVimキーバインドはどうだったのかというと, **現状何が良いのかさっぱりわからんです.** いちいちモードを切り替えるのが大変だし, 日本語入力との相性がよくないし. いや, 思った以上につらい. 

とはいえ, この手のものは1-2週間も使っていれば次第に慣れてくるものなのでもう少しがんばるつもりです. 果たして2週間後には「Vimキーバインド最高！」と叫ぶトレンディなVimクラスタになっているのか, はたまた母なるEmacsに還っていくのか. 

# 恥ずかしながら帰って参りました(追記:2017/05/21)

Vimに浮気しかけた身ではありますが, 結局Emacsに戻ってきました.

前節のつづきですが, とりあえずもう1週間ほどVimキーバインドで遊んでみました. 結局何が良いのかはわかりませんでした. ここで「やっぱEmacsだわ」となったわけですが...

4月に社会人の仲間入りを果たしました. その会社の新入社員研修でなんと**Vimの使用を強制されました.** Vimを使えと.　そもそも会社のPCでrootを取ることができないつまりCapsLockをCtrlに変更できない時点でEmacsのアドバンテージが大幅に削がれていました. ならばVimの使用も致仕方ないと思い, ここ3週間ほどほぼノーカスタムのVimを触っていました.

お仕事なのでマジメにやらねばならんという心意気からか, わりとモードにも慣れてきてVimの有り難みがわかってきました. **テキストの編集能力は確かにすごい. モードチェンジはめんどくさいけどすごい.**

しかしおうちに帰ってふとEmacsに触ると, 中途半端にVimに慣れたせいか**コマンドミスが異様に増えました.** 文字入力の後に`Esc`を連打したり, `dd`とか`dw`とか打ったり, `C-b`のつもりが`C-h`押してたり. これは厄介.

Vimの有り難みもなんとなくわかってしまった今, SpacemacsのEvilモードも非常に捨てがたい.  でも結局`Esc`がめんどくさい, 行頭に移動するのが`0`なのに行末は`$`でShiftを押す必要がある統一感のなさ, などなど気になるポイントが拭いきれない. そんなのキーバインド変えればいいじゃんとも思うが, 行き過ぎると結局ほぼEmacsになりそうでなんか嫌.

そんな自分にとって**SpacemacsのHybridモードは神の御技かと思いました.** マジで. HybridモードとはノーマルモードがVim, インサートモードがEmacsといった具合の折衷ステートです. ノーマルモードでVimの恩恵を受けられる! インサートモードで使い慣れたEmacsの機能を堪能できる! とはじめはウキウキしていましたが, **結局のところ誤爆頻発の憂き目に.** カーソル移動(`hjkl` or `C-fbpn`), 行削除(`dd` or `C-k`), 単語削除(`dw`, `M-d`)等々, モードごとに頭を切り替えるのは辛い. エディタはHybridでも脳みそはハイブリッドになってくれなかった. 

普段はインサートモードでテキスト編集のときだけノーマルモードに移る, という運用も考えましたが, モード切り替えのコストを考えるとEmacsの機能でどうにかするほうが早いように思える...とまあ色々と考えた末,  **ただいま, Emacs**と相成りました.

今の自分はわりと平等な視点を持てている気がします. **VimもEmacsも素晴らしい思うよ**と今でこそ高らかに宣言できます. なぜ自分がEmacsを使っているかといえば, はじめて出会ったのがEmacsだったから. 三つ子の魂は百まで続くのでした.

ということで浮気はここまでです. Emacs(Spacemacs)と添い遂げることと致します. たぶん.


![spacemacs1.png](https://qiita-image-store.s3.amazonaws.com/0/146775/61ded188-ed43-91cf-ad63-4e6044bdfcd4.png)