Spacemacs入門その1

前回は、[spacemacsについて ~~spacemacsが最強で最高で神エディタであると思い始めた件~~](http://qiita.com/nobkz/items/994c6b3e6f42a0e33fef) という全く入門になってない、ポエムを書いたので、Spacemacsの入門記事を書いてみることにする。

この記事を書くとき、対象のユーザを設定するのに少し困った。というのも、対象ユーザ像として、誰向けに書こうか?と考えたとき、大きく分けると

* Emacsユーザ 
* Vimユーザ
* その他のユーザ

に分かれてしまう。そして、Emacsユーザのみを考えても、同じEmacsでも関心が異なることがある。ひとまず、EmacsでもVimのユーザでも無い、「その他のユーザ」がSpacemacsを導入するというととを考えて、記事を書いてみる。

どうしても、暗黙知があり、説明に飛躍があるかもしれないが、できるだけカバーして書いていきたい。

さて、今後4回に分けて書こうと思う。

* その1 ： Spacemacsの環境構築、基本的な操作、
* その2 ： Spacemacsの設定のキホン事項、
* その3 ： Spacemacsの設定の詳解
* その4 ： Spacemacsのレイヤーの基礎

以上が入門としてである。また、今後、さまざまなレイヤーが提供されているので、いくつか詳解したい。

#  Spacemacs入門その1 

## 環境構築

これは、[spacemacs](https://github.com/syl20bnr/spacemacs)に書いてある通りに、やれば良い。

まずは、Emacsを導入する。[spacemacs](https://github.com/syl20bnr/spacemacs)によると、各自好きな方法で、導入して良いと思うのだが、osxの場合、

```
$ brew tap d12frosted/emacs-plus
$ brew install emacs-plus --with-cocoa --with-gnutls --with-librsvg --with-imagemagick --with-spacemacs-icon
$ brew linkapps
```

が推奨されているようだ。

そして、spacemacsの.emacs.dをgitからcloneする。emacsでは, .emacs.dは、emacsにおいて、設定や拡張のファイルを入れておくところだ。Spacemacsは、emacsの拡張で、.emacs.dを導入して、emacsをSpacemascにカスタマイズするということである。

```
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
```

最後に,Emacsを起動しよう。ここで、spacemacsに必要なパッケージがダウンロードされる。また、ここで、EmacsかVimかの、キーバインドの設定を求められる。

```
emacs --insecure
```

キーバインドの設定でおすすめなのが、Vim(Evil)に設定しておくことを勧める。これは、もともとEmacsのユーザであっても、一度しばらく試してほしい。 個人的には、モード(ステート)に慣れればすごい良いものだと思えると思う。

## Spacemacsを使ってみる(Spacemacsツアー)

慣れた人であれば、最初にまず、自分なりに設定をするとは思うのだが、まずは、簡単に基本的な事項を説明しながら、Spacemacsを体験してみよう。

<img width="1280" alt="スクリーンショット 2016-06-04 21.23.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/76f57b76-35a2-99e8-aa52-45bd76f08315.png">

ここでは、基本的な操作を解説していく。まず、ファイルを開く、そのあと"Hello World"などとテキストを挿入し、最後保存といった基本的な流れを説明して行く。

### スペースキーが基本

さて、Spacemacsとう名前が付いていくぐらいであり、Spacemacsは、スペースキーからいろいろな操作を行なうことが可能である。まずは、スペースキー(`SPC`)を押してみよう。(Emacsのキーバインディングを選択した人は`SPC`を`M-m`と置き変えて読んでみてくさい。)

<img width="1280" alt="スクリーンショット 2016-06-05 3.15.26.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/89570367-10af-3ab5-b4e2-a616bed251cb.png">

下に、キーバインドの一覧が見れるはずだ。この一覧、は`which-key.el`の機能である。赤字で書かれている+から始まる文字は、まだ次のキー操作が必要なものだ。

さて良くみると、`f`が、ファイル操作、`b`がバッファの操作、`c`がコンパイル、`w`がウィンドウの操作などと、ちゃんと覚えやすくなっていることが分かる。と同時に、やりたい操作が探しやすくなっている。ウィンドウ操作がしたければ、wあたりを探せばいいのかな?となってくる。

さて、SPCからのコマンド入力を誤ったなどと、コマンド入力を一端キャンセルしたい場合はとりあえず`C-g`を押せば、キャンセルされる。とりあえず、`C-g`を押して、`SPC `の操作をキャンセルしておこう。

### ファイル操作

#### バッファとウィンドウ

まず、基本的な知識として、Emacsは**バッファとウィンドウ**がある。Emacsは、バッファとよばれる、ユーザの作業領域があり、そこでファイルの内容を読み込み、編集し、そして、その編集を元のファイルに保存する。つまり、一時的な編集作業領域がバッファである。

そして、そのバッファの内容を表示するのが、ウィンドウである。emacsは、ウィンドウを分割したりすることによって、複数のファイルを開いて、並行に作業することができる。

### ディレクトリツリーを表示する

さて、ファイルを開くために**ディレクトリツリー**を表示してみよう。普通のエディタであれば、ファイルツリーを表示できて当たり前であるだろう。

`SPC f t`を押してみよう。fはファイル操作、tは恐らくtreeからだろう。ここで、which-key.elのwindowが変化していることも見ておこう。さて、このキー操作でディレクトリツリーが表示される。(これは、**neotree**という拡張の機能である。)

<img width="1280" alt="スクリーンショット 2016-06-05 3.37.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/13a6efe8-3f14-2db6-602d-96f7f5e3d299.png">

### ディレクトリツリーの操作

さて、ディレクトリツリーを操作して、ファイルを追加したりしてみよう。

まずは、**ディレクトリツーのウィンドウをアクティブ**にしておこう。おそらく、`SPC f t`の直後であれば、既にアクティブな状態になっている筈だが、そうで無ければ、マウスでアクティブにするか`SPC 0`などを押してアクティブにしよう。Spacemacsに置いて**複数のウィンドウの移動は、マウスか`SPC <対応するwindowの数字>`で移動できる。windowの数字は、ページ下部にあるライン(モードライン)に表示されている。

<img width="465" alt="スクリーンショット 2016-06-05 14.36.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/b6d54090-ee95-f459-06cb-4bef998f5f30.png">

さて、neotreeのwindowがアクティブであるのを確認したら、ディレクトリツリーにノードを追加してよう。そのために、ああ、どうしよう! 追加するキー操作を忘れてしまった! ちょっと強引だが、こういった光景は良くあることだろう。

もちろん、この場合ググっても良いし、また、`M-x`からコマンド名を入力してもいいのだが、こういった場合には、Spacemacsは、キー操作を調べる方法がある。`SPC h k`である。(この場合`h`は`help`であり、kは`key`のことだろうと思う、なんとも覚えやすいと思う。)


さて、たくさんのキー操作がでてきた。

<img width="1280" alt="スクリーンショット 2016-06-05 14.44.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/dd4fb474-2f16-8ccf-ca20-fb809504a721.png">


さて、ここで、目的のキー操作を探してみよう。`neotree`の機能であるので、`neotree`というワードと、ファイル作成なので`create`などを探しておこう。とすると、`neotree-create-node`がそれっぽい。なるほど、`tree`なので、`node`を作るってことであるだろう。なので、`c`を押下してみよう。

そうすると、`node`を作成する画面が登場する。

<img width="1280" alt="スクリーンショット 2016-06-05 14.53.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/e29eb42c-0d27-1f97-2f29-834095f3a01c.png">

とりあえず何か作成してみよう。とりあえず、helloworldというNodeを作成した。

<img width="739" alt="スクリーンショット 2016-06-05 14.56.47.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/4da3e25c-ac5d-c378-0a91-7f374805a36c.png">


### テキストを編集して、保存する

さて、helloworldというファイルが生成されたようなので、編集して保存してみよう。

おそらく、開いた状態のままだと、モードラインがこの様に表示されているだろう。

<img width="437" alt="スクリーンショット 2016-06-05 14.59.07.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/dd6892a0-fede-0f9f-5a85-8a793d5681aa.png">

このオレンジの色の状態は、Evilのノーマルステート(Vimにおけるノーマルモード)である。これは、カーソル移動などのための状態であり、このままではテキストを入力できない。なので`i`を押下してみよう。すると、インサートステート(Vimにおけるインサートモード)に変化し、モードラインの色やカーソルの形が変化する。

<img width="364" alt="スクリーンショット 2016-06-05 15.01.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/de6ac162-83a7-d7ea-65c4-105ecb133ddb.png">


この状態でテキストが入力できるので、テキストを編集しよう。ここでは、`hello world`とタイプした。

さて保存してみよう。保存するためには、ノーマルモードに切り変えなければならない。**`fd`とすばやく押下してみよう** (同時押しぐらいの感覚で良い)。また、オレンジの状態に戻るはずだ。また普通のVimのように、`ESC`や`Ctrl-[`とタイプするのでも良い。

保存してみよう。保存は、`:w`(vim風の操作)良いし、`SPC f s`(`f`は`file`、sは`save`である)でも良い。

最後に編集したバッファを閉じてみよう。`SPC b d`でバッファを閉じることができる。(キー操作の意味については考えてみよう)


## まとめ。

今回は、簡単な導入と、Spacemacsのキー操作について、体験した。 読んで、Spacemacsでのemacsが如何に魅力的かが理解して頂けたら幸いである。

次回は、Spacemacsの設定の基本的なところを説明する。お楽しみに。

## 補足Vimの操作について。

細かい、Vimの基本的な操作に慣れて無い人は、どこかで、基本的なVim操作を覚えるか、または、Spacemacsから`Evil-tutor`をやっておくと良いでだろう。`SPC h T`と順番にタイプしてみよう。

そうすると、画面に、Evil(Vim)のチュートリアルが表示される。画面従ってやっておくといいだろう。

<img width="1034" alt="スクリーンショット 2016-06-04 22.22.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/31381/0edb4392-b7fd-16b5-1097-ca5c49057717.png">

最初は**全部はやる必要はない**と思う。最低限

* ノーマルモード(ノーマルステート)、挿入モード(インサートステート)の切り変え
* `hjkl`のカーソル移動

に慣れることが大事だと思う。ちなみに、Vimにおいて、ノーマルモードへの移行は、`ESC`か、`C-[`だとは思うが、Spacemacsのデフォルト設定ではおそらく、先のコマンドに加え**`fd`と素早く押す**ことによって、切り変えが可能である。(後に詳しく設定などを解説する。)

また、`:q`などをVimにおける終了の操作をしてしまうと、そのファイルを閉じるだけでなく、**Spacemacsが終了してしまう**ので注意してほしい。(このあたりは、設定を変更することが可能だ)