Spacemacs入門その2 設定のキホン

時間がだいぶ開いたが、書いていく。

前回、[その1](http://qiita.com/nobkz/items/a0df6c87107401effd4c)を書いた。その1では、簡単な導入と、Spacemacsの簡単なツアーをご紹介した。

今回は、基本的な設定や拡張にまつわることに付いて書く。

他のエディタやIDEを使ったりvimなど特に何も設定しないことが多いだろう。しかし、emacsユーザの殆どの人達は、デフォルトの設定や拡張もなく、そのまま使うことは無い。やはり、より快適に使うために、日々設定を調整し、拡張していき、どんどん自分なりのエディタを作るものだ。

spacemacsは、emacsと同様に設定したり拡張したりすることができる。しかし、emacsほど、沢山の設定や拡張を入れるなんてことはしなくて良いようにできている。今回はそのやり方を見ていこう。

また、最初に設定すべき重要な項目のみに絞る。重要なのは、すべてを一度に設定するよりも、使っていくうちに少しずつ設定を変えていくことだと思う.設定自体は **emacs lisp**を記述することになるが、今回は深くは説明しない。設定の内容がある程度理解できるようにする。emacs lispについてもだんだん覚えていけばいい。

## 紹介するキーバインド

今回紹介する、キーバインドを予め紹介する。

| キーバインド | コマンド | 機能 |
|:-----------|:------------:|:--------:|
| `SPC f e d`   | `find-dotfile` | .spacemacsファイルを開く |
| `SPC f e R`  | `dotspacemacs/sync-configuration-layers`  | 設定ファイルの反映 |

### org-layersのキーバインド

今回は、`org-layer`を設定してみる。後日 、`org-layers`は詳しく紹介するが、今回は簡単に。

| キーバインド | コマンド | 機能 |
|:-----------|:------------:|:--------:|
| `SPC m L`   | `org-shiftleft` | todoをdoneに変更 |



## 設定を書く

spacemacsは`.spacemacs`か、`.spacemacs.d/init.el`などに設定を書いいく。おそらく、spacemacsをインストールしたばかりであれば、`.spacemacs`が生成されているはずである。以降の記事は`.spacemacs`であると仮定する。(私は,`.spacemacs.d/init.el`だが。)

さて、`.spacemacs`を編集していく。直接 `SPC f f`で`.spacemacs`を開いても良いが、`SPC f e d`でも行ける。(おそらく、fileとemacsとdotfileの頭文字であろう)。

さて、設定を書いていくが、おそらくspacemacsにおいて、最も重要な設定といえば、**レイヤー設定** であろう。

### レイヤーとは?

後の記事で、またレイヤーについて詳しい説明をするが、簡単にレイヤーについて説明しておこう。レイヤーとは、簡単に言えば、パッケージをまとめたもので、たとえば、rubyのレイヤーに関しては、rubyのパッケージがまとめて導入できるものである。


### レイヤーを設定する

さて、レイヤーを設定してみよう。 spacemacsには様々なレイヤーが存在するが、まずは、`org-layer`を設定してみよう。`org-layer`とは、`org-mode`という、emacs上で、todoリストやメモ、スケジュール管理などが行なえるモードである。 便利であるし、emacsに慣れるためにも、是非とも `org-layer`は使ってみると良いと思う。

`.spacemacs`内部にこのような記述があるはずだ。

```el

   dotspacemacs-configuration-layers
   '(
     ;; ----------------------------------------------------------------
     ;; Example of useful layers you may want to use right away.
     ;; Uncomment some layer names and press <SPC f e R> (Vim style) or
     ;; <M-m f e R> (Emacs style) to install them.
     ;; ----------------------------------------------------------------
     ;; auto-completion
     ;; osx
     ;; org
     ;; better-defaults
     ;; git
     ;; markdown
     ;; org
     ;; spell-checking
     ;; syntax-checking
     ;; version-control
     )

```

この`dotspacemacs-configuration-layers`の直後にある``'(   )``の内部に有効にするレイヤーを設定する。 org-layerを設定してみよう。 org-layerに関しては、通常では`;;org`でコメントアウトされている、コメントを外せば良い。(emacs lispでは、コメントは`;;`で書く)

もし、`;;org`が見当らなければ、そのまま`'()`内部のどこかに記述しておこう。
 
```el

   dotspacemacs-configuration-layers
   '(
     ;; ----------------------------------------------------------------
     ;; Example of useful layers you may want to use right away.
     ;; Uncomment some layer names and press <SPC f e R> (Vim style) or
     ;; <M-m f e R> (Emacs style) to install them.
     ;; ----------------------------------------------------------------
     ;; auto-completion
     ;; osx
     ;; org
     ;; better-defaults
     ;; git
     ;; markdown
     org ;;ここのコメントを外す
     ;; spell-checking
     ;; syntax-checking
     ;; version-control
     )

```

## 設定を反映して、org-layerを試す。

さて、ここまで書いた設定を反映してみよう。 設定ファイルなので、まぁ、spacemacsの再起動でも良いが、`SPC f e R`で反映される。`org-layer`の詳しい使い方は別個また書く予定ではあるが簡単な紹介をしておく。

さて、簡単にtodo listを作ってみよう。まずは`SPC f f`などで、`TODO.org`というファイルを作成して、以下のように書かく

```
* DONE spacemacsの記事を書く
* TODO spacemacsの記事2を書く
* TODO spacemacsの記事3を書く
* TODO spaceemacerのためのemacs lisp入門記事を書く
* TODO spacemacsのlayer各種の記事を書
```

とするとこのように表示される筈である。

<img width="511" alt="スクリーンショット 2016-09-14 18.12.40.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/eae81b67-4670-4020-ed9a-598b8c704f9a.png">

さて、TODOをDONEにしてみよう。とりあえず、todoをdoneにしたいところにカーソルを移動して、`SPC m L`と入力しよう。すると,

<img width="569" alt="スクリーンショット 2016-09-17 11.18.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/a25c29d8-75b6-fae7-59e6-bb60dd095a1b.png">

となり、DONEとなった。`SPC m`から始まるのはメジャーモードのキーバインドがまとめられており、メジャーモードに関するキーバインドはとりあえず、`SPC m`とタイプしてみよう。

## まとめ

以上で設定のキホンを述べた。基本的に、`.spacemacs`を編集して行く。次回の記事で、設定詳解を書いていく。

また、後日記事にて、レイヤーの基本的なことや、`org-layer'などの各種レイヤーについて解説していく。

## 補足 emacs lispについて。

`.spacemacs`などの設定ファイルは、**Emacs Lisp**で書かれる。Emacs Lispに関しては段々覚えていけば良いと言ったが、それでもemacs lispの凄く基本的なことは知っておいても良いだろう。なので、Emacs Lispに関して初歩的な内容を補足しておく。

まず、`SPC b b`で、`*scratch*`というバッファがあるのでそれを選択しよう。`*scratch*`バッファというのは、emacs lispを試し書きする場所である。ここで、emacs-major-modeになってないのであれば、`SPC :` で`emacs-lisp-mode`にしよう。`emacs-major-mode`かどうかは以下で確認できる。

<img width="462" alt="スクリーンショット 2016-09-17 12.20.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/e96f7826-8369-d220-23f2-a54e64c11d89.png">


さて、なにかemacs lispを書いてみよう。以下のように書いてみよう。

```el 
(+ 3 4)
```

そうして、`SPC m e e`と押してみよう。ミニバッファに`7`と表示されるはずである。おそらく、お分かり頂けてるとは思うが、`7`というのは`(+ 3 4)`の実行結果である。emacs lispはプログラムを実行することを**評価(eval)**と呼ぶと覚えておこう。

さて、上記のプログラムの様にEmacs Lispというか、大抵のLispは、

```el
(関数 値 値 値)
```

という形を取ることを覚えておこう。
また、

`'(+ 3 4)`

と書いて、また、`SPC m e e`と押してみよう。今度はそのまま`(+ 3 4)`とミニバッファに表示されている筈である。`'`が付くと、emacs lispは評価しなくなる。この記号は**クォート**と呼ぶ。評価されない`'(+ 3 4)`はこれは**リスト**のデータとして扱われる。

設定にて、`'(a b c ....)`という形はたくさん出てきているが、これはLispのリストを表わしているんだということを覚えておこう。