Life goes on

何かJavaScriptとかVimとかMacとかに関係してそうな深淵から覗かれる者

Spacemacsの設定の話

現在のSpacemacsの設定について。GitHub にあるものそのままですが。

.spacemacsについて

Spacemacsをインストールしてから、初回の起動時に対話式で設定を聞かれたあとに、 .spacemacs というファイルがホームディレクトリに作られます。基本的に、Spacemacsでは、この .spacemacs に設定を記述していく形になります。

<Space> f e d というキーバインドでさっとこのファイルが開きます。ちょっと設定を書いてから、Spacemacsに反映させるには、 <Space> f e R で反映されます。便利ですね。自分は現状このファイルを触ってるだけで事足りています。

dotspacemacs-configuration-layers

ある意味この設定が一番、Spacemacsの特徴ということになるかもしれません。Spacemacsは独自に Layer というシステムを作っています。これは各機能をそれぞれまとめてるプラグインみたいなものです。

各種プログラミング言語や、フレームワーク、スペルチェッカーなどなどの Layer があり、その中に色々なelispのインストールや設定なんかが書いてあります。

なので、使いたい Layer をこのセクションで設定するだけで、そのプログラミング言語や機能の一通りの便利設定が使えるという事になります。これがまあすごく便利です。今までVimなんかでも新しいプログラミング言語プラグインを使おうとするとプラグインを導入するのはもちろんのこと、neocompleteとの連携なんかも考えてあげたりする必要があったり、1つのプラグインだけでカバーできない機能は他のプラグインを見つけなきゃいけなかったりしましたが、Spacemacsはその点がものすごく楽です。

現在自分が設定してる Layerこちら になります。リストアップすると…

基本機能系

  • auto-completion
  • better-defaults
  • spell-checking
  • syntax-checking
  • org
  • emoji
  • eyebrowse
  • osx
  • dash
  • gtags
  • pandoc

eyebrowse というのはVimでいうタブにあたる機能を提供してくれます。使い勝手は若干違いますけども、自分の運用ではとても重宝してます。

あと初めて使い出したけど、 org が事の他便利でした。このためだけにEmacs使ってるって人を何人か見てましたが、マジで便利だわ。

osxMacで使うときの便利機能が入ってました。optionをMetaとして使うとかそこら辺のキーバインドやおなじみの ⌘-z とかそれ系のキーを使えるようにできたり。

VCS

github 使うとGistの編集や投稿なんかや、編集しているファイルのGitHubのリンクを取得したりできます。

プログラミング言語

こんな感じです。

勉強中のとか仕事で使ってるのとか系のは大体入れてあります。あんまり、「あ、これが足りない…」みたいのはまだ起きてないですね。

dotspacemacs-additional-packages

Layer 便利なんですが、他に入れたいプラグインとかがあったらこのセクションで設定してあげるようです。

自分の現状は こちら です。

  • editorconfig
  • ddskk
  • quickrun

これしか入れてません…。今のところこれで十分でした。 ddskk はもともと無いと日本語の入力ができないくらいに依存してるんですが、他もVimで使ってたのでという感じです。 migemoは入れようかとも思ったんですが、Vimでインストールしてたけど使用頻度が少なかったなーということで入れてません。

そういえば、3回ほどしくじったポイントがあって、それが入れようとするプラグインが既に Layer に入ってるというものです。

自分の場合、 evil-orgcoffee-modegist.elexec-path-from-shell などをこのセクションに入れてたんですが、そもそもこれら全部、上記の Layer に入ってたました…。

教訓としては、 プラグインを入れる前に <Space> h <Space>プラグイン名を検索して無ければ入れる という感じでしょうか。

思いのほかいろいろとプラグイン入ってます。

dotspacemacs/user-config ()

大体の自分の設定はこの関数の中に書くようです。自分の現状は こちら

dotspacemacs-additional-packages で入れたプラグインの設定がメインになっています。 Layer の設定は全然してない。markdownのプレビューにMarked2っていうアプリ使うのとかくらい。

(fset 'evil-visual-update-x-selection 'ignore) について

一個重要な設定があって、それが (fset 'evil-visual-update-x-selection 'ignore) という設定なんですが、この設定を入れておかないと、他のアプリでコピーしたものを、Emacsにビジュアルモードを使って選択した部分にペーストした場合に変な挙動になってしまいます。(Emacs内でyankしたものが貼られてしまう)

この設定を入れておくとちゃんとヴィジュアルモードで選択しても意図したペーストになります。

このIssue を参考にしました。

まとめ

設定ファイルに関しては、.vimrcが920行くらいある自分の状態から考えるとすごくすっきりしました。Spacemacsに移行する際に自分の中で機能とかの意識的な斷舎離したっていうも、もちろん大きいんですが。

この位の設定でさくっと使えるので、Spacemacs良いです。

Spacemacsの情報源について

前回のエントリにも書いたんだけども、Sapcemacsの情報がわりと少ないです。まあグリム童話のコウモリみたいなポジションなんで、しょうがない部分もありつつ…。 そんななか今まで参考にしてきた情報源をちょっとずつピックアップしていきます。

Spacemacsのリポジトリ

なんだかんだと一番参考にしてるかも。特にSpacemacs documentationが良い感じです。あとは結構リリース頻度が高いので、Release を見たりとか。

オンラインドキュメント

実はSpacemacsで <Space> h <Space> を入力することによって、オンラインドキュメントが引けます。

上記のドキュメントなんかもorg形式で読めたりしますし、新しいLayerを使うときにはそのREADMEなんかもHELMで検索することができて便利。

Spacemacs Rocks

Braian Hicksさんが運営してるTipsのブログ。このリポジトリ にPRしたりしても載るらしい。結構オススメです。

今気になってるのはこのメディアの持続可能性についてです…火曜木曜に更新!みたいなこと書いてるけど、1ヶ月くらい何の音沙汰もないというね…。IssueとかPRは来てるんで、本人忙しいんですかね。

その他

気になったSpacemacs関連の記事は自分のPinboard のリンクにしてるので、こちらも良ければ見てください。

ということで、現状少ないのですが、Spacemacsの情報です。公式のドキュメントが充実してるのが救いです。なんせQiitaにもSpacemacsのタグ付いた記事2つしかないというね…。

あとこのドキュメントはEmacsのorg-modeで書いて、MarkdownにPandoc使って変換しました。せっかくEmacsなんで、ちょっと慣れておこう。

6年間使っていたVimからEmacs(Spacemacs)に乗りかえた

6年間ずーっとVimを使ってきましたが、今のところ完璧に乗りかえられた。EmacsというよりかはSpacemacsがすごく良い。

発端

Spacemacs自体は2014年にGithubのTrendingで見かけて気にはなってStarはしていたけど、そのまま忘れてた。で、今年のクリスマスイブ(特に関係はない)にQiitaのVimも秘伝のタレも飲み込むEmacsの超強力ディストリビューションSpacemacsまとめ - Qiitaという記事を見かけて「あ、そういえばあったな」って思いだした。これ読んで改めて便利そうだなと思ったので。

感想

Spacemacsのサイトにキャッチコピーがあってそれが

The best editor is neither Emacs nor Vim, it's Emacs and Vim!

って書いてるんだけど、マジでこの通りだなと思った。すごく良い。調べるとわりとみなさん、Emacsとして使ってる人が多数派っぽいんだけどもマジでVimから乗り換えできる感じ。機能的には上記のQiitaの記事などをご覧いただくとして、ここでは自分が良いなーと思った点をいくつか。

Evilが高度に統合されている

実は1年くらい前にもEvil: EmacsをVimのごとく使う - 導入編 - 貳佰伍拾陸夜日記のシリーズを参考にしてEvilを導入したEmacsを使おうとしたことがあった。

最初は「マジでキーバインドVimと遜色ないわこれ…!」と感動したんだけど、それはそもそもテキストの編集だけだったので、例えばEmacsでGitを扱う場合に使うMagitとかを使う場合にはEmacs流のキーバインドで操作しなければいけなかった。これが不満だったので、途中で導入をあきらめた。もちろん、自分でフックを作ったりしてキーバインドを設定したりしてあげれば大丈夫なんだけど、そもそも大昔(7年前くらい?)に3年間使ってたEmacsを使おうとするとまあバージョンも新しいから昔の知識なんぞ役に立たないし、そもそも覚えてないってことで挫折していた。

しかし、Spacemacsのとても優れている点はそこら辺の違和感を無くすような工夫がしてある点だと思う。どういうことかというと、Spacemacsを使う際にはLeaderキーとして<Space>が割り当てられているのだが、この使い勝手がものすごく良いからだ。前述のMagitでいうと、Emacsとしては

  • M-x magit-status

としてまず、magit-statusを呼び出すのだが、これがSpacemacsだと

  • <Space>g g

で呼び出せるようになる。しかもリアルタイムに押したキーに対応してどのキーが何の機能を呼び出すのかを教えてくれるという親切設計。上記のキーバインドGitgとして覚えれば覚えやすい。公式サイトにMnemonicって書いてるけどその通りだと思う。

このEmacsでも(正確に言えば)Vimでも無い独自かつ一貫性のあるコマンド体系で、コマンド入力が全く苦ではなくなるのがすばらしい。しかも大体のコマンドはこの<Space>からのキーを押すだけで使うことが可能。

言語別にプラグインをまとめて設定してくれてる

自分のような門外漢がEmacsで開発しようとしたときの高いハードルとしてこの言語ではどんなモードを組み合わせれば良いのか分からないというのがあった。JavaScriptで具体的に書くと、そもそもEmacsJavaScriptを使おうとすると4つほどメジャーモードがあるっぽいというのがググって出てくる

  • js-mode
  • js2-mode
  • js3-mode
  • web-mode

で、情報の探し方がイマイチ分からなくて何が良いのかちょっと分からん…ってことになる。大体はjs2-modeか、web-modeのどっちかぽいんだけど…ってとこまでは分かるんだけども。これに加えて、auto-completeの設定やsnippetの設定、Tern.js使ったauto-completeとの連携、リアルタイムのエラーチェックなんかをしようと思うともう、ネットの海は広大よ状態。

Spacemacsではこの辺がすごく簡単に設定できる。導入時に勝手に作られる.spacemacsというdotfileがあり、ここで全ての設定を管理するのだが、このファイルで以下のようにするだけで、JavaScriptが簡単便利に使えるようになる。

(dotspacemacs-configuration-layers '(auto-complete javascript))

これだけの設定で以下の機能が設定済みで使えるようになる。

素敵すぎる。他の言語もこんな調子でどんどんとdotspacemacs-configuration-layersに言語名や機能名を追加するだけで使えるようになる。

そして、大体のメジャーモード固有のキーは<Space> mに集約されているので、どの言語を使ってもこれ覚えておけば困らないというおまけ付き。

Vimとほとんど操作感は一緒

一番気になる、操作感だけど現状ではほぼ変わらない…と思う。一番デカい違いがこれくらいかな。

function hoge(fuga, hogera) {
    //処理
} 

みたいなコードのfunctionfにカーソルがあったときにcibのコマンドを打つと、Vimでは

function hoge() {
    //処理
}

と、丸カッコの中が編集可能な状態になるんだけど、Spacemacsでは丸カッコに移動してくれない。

それ以外、ちょっとずつ「あれ、これ違うのか」みたいなとこはあるけども根本の不満ではないんであんまり気にならない。もしかしたら設定あるのかもしれないけども。

最初からテーマがステキ

これも昨今、俺のなかで重要なんですが、Powerlineみたいな拡張を入れているので、Spacemacsの最初からシャレオツな感じでテーマや、ステータスバーが設定されてるのもグッド。

そもそも何で乗りかえようと思ったのか

自分のVimの使いかたって元々気付いてはいたんだけど、俗にいうEmacs的な使い方してたからです。だったらEmacsにしちゃえば良いかーと。

Emacs的な使いかたっていうのはこんな感じです。

  • 朝立ち上げたVimをスプリットやらタブやらでプロジェクトや用途毎に分けて1日終わるまでずーっと立ち上げっぱなし
  • 入れてるプラグインがエラい数になってる(120個くらい?)

この使いかたしてるとたまにVimのUniteとかCtrlPとかがおかしくなってVimの再起動したりとか、Syntastic + neocompleteで入力がすごい重くなったりという現象があったので乗りかえました。

これはVimが悪いんじゃなくって完璧に自分の使い方が間違ってるだけなんですが。

ということで、今はSpacemacsのおかげでかなり快適なエディタ生活を送っています。

自分のSpacemacs導入方法

リポジトリREADMEに書いてるインストール方法でも全然問題ないんですが、自分はdotfilesをGitHubで管理しているのでこんな感じでインストールしてます。

$ cd dotfiles
$ git submodule add git@github.com:syl20bnr/spacemacs.git .emacs.d
$ git submodule sync
$ git sumodule update
$ cd ~
$ ln -s dotfiles/.emacs.d ./
$ mv .spacemacs dotfiles/ # Spacemacsを立ち上げたあとに
$ ln -s dotfiles/.spacemacs ./

あとは、Spacemacsでアップデートがあったときには、submoduleのアップデートを自分のdotfilesにpushしていくだけになります。最初はまんまcloneしてきたんですが、他のMacでの共有とかを考えるとsubmoduleが良いかなあなど。

結論

Vimmerが乗りかえるクォリティをSpacemacsは持ってる。かなり良いです。オススメ。ただし、難点は何か調べものするときにSpacemacsとしての情報がとても少ないということです…。Emacsの情報を調べても自分の頭のなかでコマンドなんかの変換してあげなきゃいけない。あと、日本語の情報も少ないです。が、リポジトリの中のlayersとか見たりしてるとなんとなく分かるので、なんとかなるかなあ。

Frontend Weeklyのキュレーターとして参加してます

これまた告知が遅れてしまってますが…。Frontend WeeklyにキュレーターとしてVol.44から参加してます。これまた11月からですね。

まあどちらかというと、「参加したいんでオナシャッス」って感じで@cssradarの人にお願いして入ったんですけども。

6人目のキュレーターなんですが、わりあいにみんな持ちよってくるURLが違ってたりして特色が出ているので面白いなーと思いながらやらせてもらっています。

Frontend Weeklyの特徴としては、フロント界隈の情報がわりと万遍なく集まってる上にサマリーが書いてることなんではないかと思います。上に書いたみたいにそれぞれの得意分野が良い具合にかぶってたりかぶってなかったりなんで広範囲な話題のご提供をしています。

ということで、みなさんぜひ購読をお願いできればと思います!

https://frontendweekly.tokyo/