Spacemacs
http://spacemacs.org/img/logo.svg
a community-driven Emacs distribution
The best editor is neither Emacs nor Vim, it's Emacs and Vim!
他人にSpacemacsを布教する際のキャッシュとしてまとめておく tl;dr: 分かりやすく多機能なキーバインド操作エディタが欲しいが、もう自由度の高い設定のメンテナンスで消耗したくない人のためのエディタ
Emacs and Vim!などと主張するがこれは謙虚で、実はEmacs, Vim and Spacemacs!と言えるほど独自要素の発明が偉大
Emacs and Vim要素としては両キーバインドをどちらも使えて、VimのmodeやらEmacsのmodeなどの発明を取り入れているなどなど
以下公式で掲げている四つの独自要素についてavashe.iconの解釈を述べる
1. Mnemonic
キーバインドが人間に覚えやすく押しやすい
マウスの設定も成されているが、統合されたキーボード操作は最高だよね!という立場なので悪しからず
vimのモードを採用、拡張しており、ノーマルモードでキーバインドを押すので同時押しがほぼない
Space + 文字n個を順番に押すというスタイル
データ構造的にはSpaceを根としてキーバインドがtrieを成している
emacs内に定義された関数に文字のtrieでアクセスする世界観
加えて各文字が実行される文字の頭文字だったりする
例えばSpace f fは"file find"で、ファイルシステムをインクリメンタルサーチする
ファイル類がfにまとめられている
バッファ(emacsの概念で、開封済みのファイル)はSpace b、検索機能はs、プロジェクト管理はp、gitはgなどなど
キーバインドがうろ覚えでも安心
押しかけのキーボードは一定時間たつとそこからの派生が一覧で表示される(which-keyが統合されている)
Discoverlable(後述)なので困ったらそれっぽい単語でエディタ内を調べられる
2. Discoverlable
キーバインドや機能、内臓パッケージを検索しやすい
困ったらとりあえずSpace h Spaceと打てばヘルプ群から探せる
Space Spaceと打てばemacsの関数群から探せるし、対応するキーバインドもあれば表示される
インクリメンタルサーチが統合されており、なんでも曖昧に絞り込みつつ選択できる
ripgrepのような外部プログラムを差し込んで使える
3. Consistent
従来は独立したツールの単位でパッケージ化されていた
Spacemacsでは(厳密ではないが)用途単位でパッケージ化されておりlayerと呼ぶ
layerには以下が含まれる
用途を達成するパッケージ群
パッケージ群を統合、簡単に導入するための設定群
統合された機能を利用するためのキーバインド群
layerを加えると先程のtrieにカテゴリが追加されるイメージ
gitを加えるとSpace g以下が加わる
layerレベルのドキュメント
使えるパッケージやキーバインドの説明
使う上でのトラブルシューティングやtipsまで書かれているものもある
ユーザはlayerレベルで考えればいいので何もかも楽
4. Crowd-Configured
Opinionatedである
マネージされる楽さ <---> カスタマイズの自由さ のトレードオフ
最近だと全体的にlspネイティブになろうとしており、それ系の機能がどんどん入ってくる ミニマルに保ちたい人には向かないが、この4つの独自要素に合意できるならこれほど楽なものはない
ちなみに最初から入っているのはelispだけで、パッケージ類はユーザが使うlayerを指定して始めて入るので最初からバイナリがでかすぎるみたいな問題はない
もうパッケージ間が不意に連携しなくなる不具合に消耗するのはやめよう
ただし完全に拒否しているわけでなく、楽さと自由さのグラデーションを選べる
layerは基本的に引数を受け取るようになっており細かい挙動が設定できる
layer単位で独自に作成し頒布可能、野良から公式に取り込まれた事例もある
設定が読まれる段階が整備されており、フレームワークがロードされる各段階でキーバインドのオーバライドやカスタマイズを差し込むことが可能
これ以上やるなら公式にPR投げて公共の物とした方がお得そう