[Emacs] 俺がCaskで入れたパッケージを1つ1つ解説していく

はじめに
========

[とりあえずEmacsのCaskを晒す](http://qiita.com/aKenjiKato/items/43ce221156f7b1c78e9b) で`Cask`を晒したが、
今回はちゃんとパッケージを解説していこうと思う。

スクリーンショットとか設定例とか載せる余力があれば別記事で作ります。

それでは早速
============

これは、読み込むパッケージレポジトリを指定しているだけです。
`el-get`ライクにGithubから直にインストールする場合は不要です。

```el
(source gnu)
(source melpa)
(source marmalade)
```

----

```el
(depends-on "anzu")
```

`anzu`は、検索を拡張したモードです。（[参考](http://qiita.com/hottestseason/items/1e8a46ad1ebcf7d0e11c#2-51)）
`anzu-query-replace`で、置き換え元文字列を入力するとヒットする候補のハイライト、置き換え先文字列を入力するとヒットする候補の横に置き換え先文字列を表示してくれます。
その他、カーソルが乗っているシンボルを置き換え対象としてくれる`anzu-query-replace-at-cursor`などがあります。

----

```el
(depends-on "auto-install")
```

`auto-install`は、URL指定だけでEmacs Lispを予め指定したフォルダにダウンロードする`auto-install-from-url`を提供してくれます（[参考](http://d.hatena.ne.jp/rubikitch/20091221)）。
URL以外に、Gist, EmacsWiki, dired, etc からインストールできます。
`auto-install-batch`は、パッケージが登場するまでとてもお世話になっていました。
最近はCask, pacakage, el-getでめっきり使わなくなってしまいました。

----

```el
(depends-on "expand-region")
```

`expand-region`は、空気を読んで選択範囲を広げてくれるマイナーモードです（[参考](http://d.hatena.ne.jp/syohex/20120117/1326814127)）。

`er/expand-region` を繰り返し実行（筆者は`C-,`にバインド）で、`emacs-lisp-mode`なら単語→シンボル→S式の内側→S式全体...と選択領域を広げていってくれます。
カーソル移動が格段に減るのでお勧めです。

----

```el
(depends-on "highlight-symbol")
```

`highlight-symbol`は、カーソルの載っているシンボルや、指定したシンボルをハイライトしてくれます（[参考1](http://qiita.com/aKenjiKato/items/8928fe57ab1fb06b36ca), [参考2](http://qiita.com/aKenjiKato/items/f465993ac8e62db69592)）。

スペルミスを洗い出すのに重宝します。

----

```el
(depends-on "multiple-cursors")
```

`multiple-cursors`は、複数の選択領域に対して、編集を行う機能です。（[参考1](http://qiita.com/scalper/items/b9e357b3af071c930777), [参考2](http://www.youtube.com/watch?v=jNa3axo40qM),[参考3](http://nishikawasasaki.hatenablog.com/entry/2012/12/31/094349)）

[Sublime Textのデモンストレーション](http://www.sublimetext.com/)にもありましたね。あんな感じです。

----

```el
(depends-on "wgrep")
```

`wgrep`は、grep検索でヒットした行を、そのまま編集できるツールです。
実はあんまり使っていないのですが、`wdired`のようなものかと思います。

----

```el
(depends-on "exec-path-from-shell")
```

`exec-path-from-shell`は、環境変数をシェルから引き継いでくれます。（[参考](http://emacs-jp.github.io/tips/environment-variable.html)）

`rbenv`や`nvm`などを使うEmacs Lispを用いるときは必要、と思っていたのですが、[こういうケース](http://shibayu36.hatenablog.com/entry/2014/01/15/230015)もあるので注意が必要です。

----

```el
;; Appearance
```

----

```el
(depends-on "color-theme-tango")
;; (depends-on "color-theme-solarized")
```


`color-theme-tango`は、[Tango 配色](http://tango.freedesktop.org/Tango_Icon_Theme_Guidelines)のカラーテーマです。
下にコメントアウトしているSolarizedに乗り換えようか迷っています。

----

```
(depends-on "rainbow-delimiters")
```

`rainbow-delimiters`は、対応する括弧に色を付けてくれます（[参考](http://qiita.com/ncaq/items/5a1d102723fec11a8bff)）。
組み込みの`show-paren-mode`のみよりもリーダビリティが上がります。デフォルトの色設定が地味な気がする。

----

```el
(depends-on "popwin")
```

`popwin`は、`helm`バッファやHelpなど、すぐ閉じるようなバッファ（？）を開くモードです。（[参考](http://d.hatena.ne.jp/m2ym/20110120/1295524932)）

バッファを勝手に作って閉じないマナーの悪い動作を抑えることができます。

----

```el
(depends-on "yascroll")
```

`yascroll`はOSのスクロールバーの代わりに、スマホライクなスクロールバーを提供します（[参考](http://d.hatena.ne.jp/m2ym/20110401/1301617991)）

----


```el
;; Coding
```
----


```el
(depends-on "yasnippet")
```

`yasnippet`は、コードスニペットを扱います。（[参考](http://konbu13.hatenablog.com/entry/2014/01/12/113300)）

メジャーモードごとにスニペットを設定可能で、
新たなスニペットを作るのもそれほど難しくありません。

筆者の場合は、C/C++のヘッダテンプレートに使って、インクルードガードを任意の文字列にできるようにしたり、
Copyrightを挿入するのに重宝してます。

----


```el
(depends-on "flycheck")
```

`flycheck`は、各種言語に対して、編集中にlintやコーディングルールチェッカなどを走らせてくれます。（[参考](http://flycheck.readthedocs.org/en/latest/)）

すでに`flycheck`自身が[メジャーな言語に対応](http://flycheck.readthedocs.org/en/latest/guide/languages.html)しています。

----

```el
;; Git
```

----


```el
(depends-on "magit")
```

`magit`は、GitをEmacsから使うインタフェースを提供します（[参考](http://qiita.com/takc923/items/c7a11ff30caedc4c5ba7)）。

インストールしたら、Gitリポジトリのあるディレクトリに移動して`M-x magit-status`を打ちましょう（筆者は`C-x g m`にバインドしています）。
現在のリポジトリの状態が表示されるので、とりあえず`?`を押して説明を出してみましょう。

----


```el
(depends-on "git-gutter-fringe+")
```

`git-gutter-fringe+`は、ウィンドウの左端に、GitのHEADからの差分がある行を表示してくれます（[参考](http://d.hatena.ne.jp/syohex/20121221/1356081771)）。

----


```el
(depends-on "git-modes" :git "https://github.com/magit/git-modes.git")
```

`git-modes`は、Gitの`.gitattribute`, `.gitignore`, `.gitconfig`, コミット、リベースのそれぞれのメジャーモードを提供します（[参考]（https://github.com/magit/git-modes））。
URLからもわかるとおり、`magit`と同じ所が作っていますが、コミット、リベース以外のモードは`magit`に入っていないようなので入れてみました。

----

```el
;; File
```

----

```el
(depends-on "open-junk-file")
```

`open-junk-file`は、書き散らかし用のファイルを作ってくれます。
`M-x open-junk-file`で、任意の拡張子で日付付きのファイルを開いてくれます。

----

```el
(depends-on "recentf-ext")
```

`recentf-ext`は、`recentf`に便利な機能（最近開いたファイルを上へ、など）を提供してくれます（[参考](http://d.hatena.ne.jp/rubikitch/20091224/recentf)）。
`recentf`自体は、Emacsに「最近開いたファイル」機能を提供します。

----

```el
;; Key
```

----

```el
(depends-on "sequential-command")
```

`sequential-command`は、同じキーを連続して押した時の動作をカスタマイズします（[参考](http://d.hatena.ne.jp/rubikitch/20090219/sequential_command)）。
組み込みの設定しか使っていませんが、そのなかで`C-a`および`C-e`の動作は秀逸です。

`C-a`を連続して押すと、行頭→バッファ先頭→元の位置、とカーソルが移動します。`C-e`も同じような動きをカーソル後ろ方向に行います。

----

```el
(depends-on "smartrep")
```

`smartrep`は、プレフィックスキーの入力を省略させてくれます（[参考](http://sheephead.homelinux.org/2011/12/19/6930/)）。
`multiple-cursors`との[応用例](http://qiita.com/scalper/items/b9e357b3af071c930777)で見つけました。

----

```el
;; auto-complete.el
```

----

```el
(depends-on "auto-complete")
```

`auto-complete`は、編集中に自動補完の候補を上げてくれます（[参考](http://cx4a.org/software/auto-complete/index.ja.html)）。

コーディングに重宝します。

----

```el
(depends-on "ac-dabbrev")
```

`ac-dabbrev`は、`auto-complete`に`dabbrev`の候補を追加します。
バッファ内にあるシンボルを保管するのに便利です。

----

```el
;; helm
(depends-on "helm")
```
`helm`は、"なんでも絞り込み"インタフェースです（[参考](https://github.com/emacs-helm/helm)）。
最近人気の`percol`がこれに似てますね。

----

```el
(depends-on "helm-git-grep")
(depends-on "helm-gtags")
(depends-on "helm-ls-git")
(depends-on "helm-themes")
```

上記は、それぞれ`git-grep`の候補を表示、`gtags`の候補を表示、Gitリポジトリの全ファイルを表示（超便利！）、カラーテーマ一覧を表示（入れたはいいけどあんまり使ってない）、です。

----

```el
;; progmodes
(depends-on "coffee-mode")
(depends-on "haskell-mode")
(depends-on "js2-mode")
(depends-on "json-mode")
(depends-on "markdown-mode")
(depends-on "scala-mode")
(depends-on "tuareg")
(depends-on "web-mode")
(depends-on "yaml-mode")
```

このあたりはあまり説明は必要ないでしょう。

`web-mode`だけ説明しておきます。

`web-mode`は、CSS, JavaScript, HTML,がごたまぜになる`.html`に対するメジャーモードです。
テンプレートエンジンにも対応しているので、Smartyなどのファイルも使えます。
昔は`mmm-mode`と他のモードを組み合わせるのが定石でしたが、もうこれで十分ですね。

----

```el
;;; Ruby
(depends-on "ruby-mode")
(depends-on "ruby-block")
(depends-on "ruby-end")
```

`ruby-block`は、`end`キーワードにカーソルを置くと、対応する`def`などをハイライトしてくれます。

`ruby-end`は、最近使えなくなってしまったらしい`ruby-electric`の代替です（[参考](http://blog.livedoor.jp/ooboofo3/archives/53748087.html)）。

通常の括弧は、Emacs組み込みのelectricで代用して、`do`などに対する`end`の挿入だけ`ruby-end`でまかなっています。

終わりに
=======

最後の方は力尽きて手抜きになってしまいました。

あと、るびきちさん、m2ymさん、syohexさんのEmacs Lispの登場率が高すぎ。最高です。