勝手に他人のEmacsの設定ファイルで利用しているパッケージを調査する

## はじめに
- Emacsの初心者であるが、設定ファイルをいじるのは好き
- 最近、Emacsの設定ファイルを整理しているのだが、色々ありすぎてどのパッケージを利用すればいいのか迷った
- いつも通りすごい人の設定ファイルで利用しているパッケージを調査し、参考にさせてもらう
- 今回は、syohexさんのdotfileで利用しているパッケージを勝手に調査する
    - https://github.com/syohex/dot_files/tree/b4faf89cec1f206b508b37db5cd59a1e23953051/emacs
- 数が多いので、割愛している部分も多い自分が利用している言語のみを調査する

## ■ Setup

### cl-lib
- Emacs LispでCommon Lispの強力な関数やマクロを利用できるようにするパッケージ
- 昔はcl.elだったが現在は整理され、cl.elは非推奨で、cl-lib.elが推奨になっている
- Emacs24からbuilt-inパッケージ（デフォルトでインストール済）になっていて、最新版のemacsであればインストールは不要でrequireするだけ
- Emacs Lispだけだとシンプルなので、ループ処理がわかりづらくなったりするが、cl-libを利用すればシンプルに記載できる
- Common Lispをばんばん書きたい人はrequireしておいた方がいい

```
(cl-loop for x in '(a b c d e)
        do (print x))
```

- 参考；
    - https://elpa.gnu.org/packages/cl-lib-0.6.1.el
    - http://elpa.gnu.org/packages/cl-lib.html
    - http://kawabata.github.io/blog/2013-03-12-emacs23.html

### init-loader
- Emacsの設定ファルを分割して読み込むことができるようにするパッケージ
- Emacsの設定ファイルを分割することで、1つ1つのファイルがシンプルになり、デバックもしやすい
- ただ、分割しすぎても探すの大変だったり、逆に管理が大変になるという意見もある
    - http://qiita.com/tadsan/items/181a352edcda740582ec
- 参考；
    - https://github.com/emacs-jp/init-loader
    - http://qiita.com/tadsan/items/181a352edcda740582ec
    - http://emacs.rubikitch.com/init-loader/

### exec-path-from-shell
- GOROOTなどの環境変数をEmacsに引き継ぐためのパッケージ
- 参考；
    - https://github.com/purcell/exec-path-from-shell
    - http://syohex.hatenablog.com/entry/20130718/1374154709

## ■ Utilities

### syohex/emacs-editutil
- syohexさん自作の個人用ユティリティー設定のパッケージ
- 自分用にキーバインドの設定などいろいろと設定している
- 参考；
    - https://github.com/syohex/emacs-editutil

### syohex/emacs-progutil
- syohexさん自作のプログラミング用ユティリティー設定のパッケージ
- プログラミング言語ごとに準備していて、
    - Golang: https://github.com/syohex/emacs-progutil/blob/master/progutil-go.el
- 参考；
    - https://github.com/syohex/emacs-progutil

## ■ Input Method

### mozc
- GoogleがOSSとして公開している日本語入力システムのMozcをEmacsで利用できるようにするパッケージ
- MozcはGoogle日本語入力から派生したものだが、辞書等は別で、Google日本語入力の変換品質はもたない
- 参考；
    - https://github.com/google/mozc
    - https://wiki.archlinuxjp.org/index.php/Mozc

## ■ undo

### undo-tree
- Emacs標準でもundo,redo機能は付いているが非常に使いづらい
- undo-treeはEmacsのundo,redo機能を強化してくれるパッケージ
- undo,redo編集履歴をTree形式で表示することができる
- 参考；
    - http://www.dr-qubit.org/undo-tree/undo-tree.el
    - http://pragmaticemacs.com/emacs/advanced-undoredo-with-undo-tree/
    - http://emacs.rubikitch.com/sd1509-safeguard-undo-redo/

## ■ highlighting

### vline
- 現在桁をハイライトするパッケージ
- 参考；
    - http://emacs.rubikitch.com/vline/

### col-highlight
- 現在桁をハイライトするパッケージ
− vlineの拡張版で、内部でもvlineを利用している
- 参考；
    - http://emacs.rubikitch.com/col-highlight/

## ■ Search (Moving cursor)

### syohex/emacs-anzu
- 現在の検索位置を画面に表示するためのパッケージ
- syohexさんがvim-anzuをEmacs用にportしたものらしい
- 参考；
    - http://qiita.com/syohex/items/56cf3b7f7d9943f7a7ba
    - https://github.com/syohex/emacs-anzu

### goto-chg
- 編集箇所のカーソル移動を簡略化するパッケージ
- 参考；
    - http://emacs.rubikitch.com/goto-chg/
    - https://github.com/martinp26/goto-chg/blob/master/goto-chg.el

### abo-abo/avy
- avy.elはace-jump-modeの新実装であり、画面のカーソル移動を強化するパッケージ
- 参考；
    - https://github.com/abo-abo/avy
    - http://emacs.rubikitch.com/avy/

## ■ Pair

### paredit
- lispを記述するのを助けてくれるパッケージ
- カッコを補完してくれたり、カッコのバランスを保ってくれたりして、ミスを防ぐ
- emacs-lisp-modeなどのメジャーモードと組み合わせて利用するマイナーモード
- 参考；
    - http://daregada.blogspot.jp/2012/03/paredit.html

## ■ Buffer

### emacs-jp/elscreen
- 古くからあるウィンドウ構成管理、Emacsをタブ化してくれるパッケージ
- ターミナルで言うとtmuxやscreenのようなもの
- 参考
    - http://emacs.rubikitch.com/elscreen/
    - https://github.com/emacs-jp/elscreen

### popwin
- ヘルプバッファや補完バッファをポップアップで表示してくれるパッケージ
- ポップアップウィンドウを管理できるようになる
- 参考
    - http://d.hatena.ne.jp/m2ym/20110120/1295524932

### lukhas/buffer-move
- バッファを上下左右に簡単に移動できるようにするパッケージ
- 参考
    - https://github.com/lukhas/buffer-move/blob/master/buffer-move.el
    - http://syohex.hatenablog.com/entry/20130904/1378307029

### syohex/emacs-import-popwin
- インポート文周辺をポップアップしてくれるパッケージ
- 内部的にはpopwin.elを利用しており、pythonやgolangに対応している
- 参考
    - https://github.com/syohex/emacs-import-popwin
    - http://syohex.hatenablog.com/entry/20130127/1359292212

## ■ Directory

### syohex/emacs-dired-k
- dired表示をカラフルにしてくれるパッケージ
- 参考
    - https://github.com/syohex/emacs-dired-k
    - http://emacs.rubikitch.com/dired-k/

## ■ auto-complete

### auto-complete/popup-el
- ポップアップインターフェースを管理するパッケージ
- 参考
    - https://github.com/auto-complete/popup-el
    - http://d.hatena.ne.jp/m2ym/20091213/1260678801

### auto-complete/fuzzy-el(無効)
- auto-complete.elを曖昧マッチに対応させるためのパッケージ
- defaultでなくdefualtと間違えて打ってしまってもちゃんと補完が出力される
- 参考
    - https://github.com/auto-complete/fuzzy-el
    - http://d.hatena.ne.jp/m2ym/20100212/1265946166

### auto-complete/auto-complete(無効)
- m2ymさんが開発した言わずと知れた和製のEmacsの自動補完パッケージ
- ただ、海外では圧倒的にcompany-modeの利用が多いらしく、そちらを使ったほうが良さそう
    - http://qiita.com/syohex/items/8d21d7422f14e9b53b17
- syohexさんはcompany-modeに移行したため、無効にしていると思われる
- 参考
    - http://emacs.rubikitch.com/auto-complete/
    - http://qiita.com/syohex/items/8d21d7422f14e9b53b17

## ■ company

### company-mode
- 世界中で利用されている自動補完パッケージ
- Emacsに絶対にいれるべきパッケージの1つ
- auto-completeとcompanyの違い
    - https://github.com/company-mode/company-mode/issues/68
- 参考
    - http://emacs.rubikitch.com/company/
    - http://qiita.com/sune2/items/b73037f9e85962f5afb7
    - https://github.com/company-mode/company-mode

## ■ helm

### helm
- Emacsでインクリメンタルに補完や検索をするためのフレームワーク
- 有名なanything.elのフォークで現在でも頻繁に開発が行われている
- Emacsに絶対にいれるべきパッケージの1つ
- 参考：
    - https://github.com/emacs-helm/helm
    - http://qiita.com/jabberwocky0139/items/86df1d3108e147c69e2c

### emacs-helm/helm-descbinds
- helmプラグインの1つで、describe-bindingsのhelmインタフェース
- 参考：
    - http://emacs-jp.github.io/packages/helm/helm-descbinds
    - https://github.com/emacs-helm/helm-descbinds

### syohex/emacs-helm-gtags
- helmプラグインの1つで、GNU globalのhelmインタフェース
- メソッドの定義先に簡単に移動できたり、 メソッドの参照元の一覧を表示できたりする
- 参考：
    - http://emacs-jp.github.io/packages/helm/helm-gtags.html
    - https://github.com/syohex/emacs-helm-gtags

### syohex/emacs-helm-ag
- helmプラグインの1つで、超早いgrepであるTheSilverSearcherのhelmインタフェース
- 参考：
    - http://emacs-jp.github.io/packages/helm/helm-ag
    - https://github.com/syohex/emacs-helm-ag

### syohex/emacs-helm-pydoc
- helmプラグインの1つで、Pydocのhelmインターフェース
- 参考：
    - https://github.com/syohex/emacs-helm-pydoc

### syohex/emacs-helm-godoc
- helmプラグインの1つで、godocのhelmインターフェース
- 参考：
    - https://github.com/syohex/emacs-helm-godoc

## ■ Repeat Utility

### myuhe/smartrep
- 連続して操作する際にPrefixを省略してくれるパッケージ
- 参考
    - http://sheephead.homelinux.org/2011/12/19/6930/
    - http://d.hatena.ne.jp/rubikitch/20140613/smartrep

### yasnippet
- 公式で、自分で定義したテンプレートをコード内に穴埋めで挿入できるパッケージ
- Emacsに絶対いれるべきパッケージの1つ
- 参考
    -　https://github.com/joaotavora/yasnippet

## ■ Golang

### go-mode
- golangのためのメジャーモード
- コードがハイライトされ、M-x godocとかでドキュメントもひけるようになる
- 参考
    - https://github.com/dominikh/go-mode.el
    - http://unknownplace.org/archives/golang-editing-with-emacs.html

### syohex/emacs-go-eldoc
- ミニバッファにドキュメントがでるようになるパッケージ
- 参考
    - https://github.com/syohex/emacs-go-eldoc
    - http://blog.shibayu36.org/entry/2013/11/10/143202

### golint
- M-x golintでgolintをかけることができるようにするパッケージ
- 参考
    - http://atotto.hatenadiary.jp/entry/2013/09/09/082440

### go-guru
- guruをかけることができるようにするパッケージ
- 参考
    - https://github.com/dominikh/go-mode.el/blob/master/go-guru.el
    - https://godoc.org/golang.org/x/tools/cmd/guru

### nsf/gocode
- golangのコード補完のためのパッケージ
- 参考
    - https://github.com/nsf/gocode

### syohex/emacs-go-impl
- vim-go-implのEmacs版
- implというgoのコマンドラインツールをEmacsで利用できるようにしたもので雛形を生成してくれるパッケージ
- 参考
    - http://syohex.hatenablog.com/entry/20140724/1406193058

### shohex/emacs-go-add-tags
- 構造体のフィールドタグを挿入してくれるパッケージ
- 参考
    - http://qiita.com/syohex/items/e72deabcbd6d769cc890

## ■ Python

### emacs-company-jedi
-  Pythonの補完パッケージ
- 参考：
    - https://github.com/syohex/emacs-company-jedi
    - http://qiita.com/sune2/items/017b5fadc43f3c44f299

### flycheck
- コーディング中にリアルタイムでコードのシンタックスチェックやスタイルチェックを行うパッケージ
- 参考：
    - http://qiita.com/senda-akiha/items/cddb02cfdbc0c8c7bc2b
    - https://github.com/flycheck/flycheck

## ■ shell

### syohex/emacs-quickrun
- emacs内でコードを実行して，結果をバッファに表示することができるパッケージ
- 参考：
    - http://qiita.com/lethe2211/items/2271fd3530248eb7db62
    - https://github.com/syohex/emacs-quickrun
    - http://emacs.rubikitch.com/quickrun/

### syohex/emacs-eshellutil
-  Emacs上でEshellを利用するためのユーテリティパッケージ
- 参考：
    - https://github.com/syohex/emacs-eshellutil

## ■ VCS

### magit
− EmacsのGitクライアント
- ターミナルに移らず、EmacsだけでGit操作が可能になる
- 参考：
    - https://github.com/magit/magit
    - http://qiita.com/takc923/items/c7a11ff30caedc4c5ba7

### emacs-git-gutter
- Sublime TextのGitGutterのEmacs版で、前回からの差分を視覚的に確認できるようにするパッケージ
- 参考：
    - https://gist.github.com/syohex/5128767
    - http://qiita.com/syohex/items/a669b35fbbfcdda0cbf2

### emacs-git-messenger
− git-messenger.vimのEmacs版で、コミットメッセージを確認できるようにするパッケージ
- 参考：
    - https://github.com/syohex/emacs-git-messenger
    - http://syohex.hatenablog.com/entry/20130515/1368629961

## ■ Documentation

### dash-at-point
- Mac専用のDashというドキュメントリファレンスアプリをEmacsから利用するためのパッケージ
- 参考：
    - http://d.hatena.ne.jp/hiro_nemu/20140126/1390745294
    - https://github.com/stanaka/dash-at-point

### zeal-at-point
- Zealというドキュメントリファレンスアプリを利用するためのパッケージ
- Linux,Windowの場合は、dash-at-pointではなく、zeal-at-pointが呼び出される
- 参考：
    - http://syohex.hatenablog.com/entry/20131130/1385815274
    - https://github.com/jinzhu/zeal-at-point

## ■ Key

### which-key
- guide-keyの改良版で、プレフィックスキーの次のキー操作を一覧で表示してくれるパッケージ
- これがあれば必要最低限のコマンドだけ暗記すれば良さそう
- 参考：
    - http://emacs.rubikitch.com/which-key/

## ■ Vim

### evil
- Emacs上でVimをエミュレートするパッケージ
- Evilは、extensible vi layerの略である
- 参考：
    - http://tarao.hatenablog.com/entry/20130303/evil_intro

## 結論
- 勝手にすごい人のパッケージを調査したが、最初からわかってはいたけど勉強になる部分ばかり
- syohexさんは自作系が多くて本当にすごい。いつかパッケージとか自分でかけるようになりたい
- とりあえず、el-get,company,helm,init-loder,yasnippetとか有名なパッケージは利用しつつ、
細かいところはすごい人の設定ファイルをパクろうと思います
- それにしてもemacsの設定ファイルは何時間でもいじっていても楽しいですね