Posted at

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

More than 5 years have passed since last update.


はじめに

とりあえずEmacsのCaskを晒すCaskを晒したが、

今回はちゃんとパッケージを解説していこうと思う。

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


それでは早速

これは、読み込むパッケージレポジトリを指定しているだけです。

el-getライクにGithubから直にインストールする場合は不要です。

(source gnu)

(source melpa)
(source marmalade)


(depends-on "anzu")

anzuは、検索を拡張したモードです。(参考

anzu-query-replaceで、置き換え元文字列を入力するとヒットする候補のハイライト、置き換え先文字列を入力するとヒットする候補の横に置き換え先文字列を表示してくれます。

その他、カーソルが乗っているシンボルを置き換え対象としてくれるanzu-query-replace-at-cursorなどがあります。


(depends-on "auto-install")

auto-installは、URL指定だけでEmacs Lispを予め指定したフォルダにダウンロードするauto-install-from-urlを提供してくれます(参考)。

URL以外に、Gist, EmacsWiki, dired, etc からインストールできます。

auto-install-batchは、パッケージが登場するまでとてもお世話になっていました。

最近はCask, pacakage, el-getでめっきり使わなくなってしまいました。


(depends-on "expand-region")

expand-regionは、空気を読んで選択範囲を広げてくれるマイナーモードです(参考)。

er/expand-region を繰り返し実行(筆者はC-,にバインド)で、emacs-lisp-modeなら単語→シンボル→S式の内側→S式全体...と選択領域を広げていってくれます。

カーソル移動が格段に減るのでお勧めです。


(depends-on "highlight-symbol")

highlight-symbolは、カーソルの載っているシンボルや、指定したシンボルをハイライトしてくれます(参考1, 参考2)。

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


(depends-on "multiple-cursors")

multiple-cursorsは、複数の選択領域に対して、編集を行う機能です。(参考1, 参考2,参考3

Sublime Textのデモンストレーションにもありましたね。あんな感じです。


(depends-on "wgrep")

wgrepは、grep検索でヒットした行を、そのまま編集できるツールです。

実はあんまり使っていないのですが、wdiredのようなものかと思います。


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

exec-path-from-shellは、環境変数をシェルから引き継いでくれます。(参考

rbenvnvmなどを使うEmacs Lispを用いるときは必要、と思っていたのですが、こういうケースもあるので注意が必要です。


;; Appearance


(depends-on "color-theme-tango")

;; (depends-on "color-theme-solarized")

color-theme-tangoは、Tango 配色のカラーテーマです。

下にコメントアウトしているSolarizedに乗り換えようか迷っています。


(depends-on "rainbow-delimiters")

rainbow-delimitersは、対応する括弧に色を付けてくれます(参考)。

組み込みのshow-paren-modeのみよりもリーダビリティが上がります。デフォルトの色設定が地味な気がする。


(depends-on "popwin")

popwinは、helmバッファやHelpなど、すぐ閉じるようなバッファ(?)を開くモードです。(参考

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


(depends-on "yascroll")

yascrollはOSのスクロールバーの代わりに、スマホライクなスクロールバーを提供します(参考


;; Coding


(depends-on "yasnippet")

yasnippetは、コードスニペットを扱います。(参考

メジャーモードごとにスニペットを設定可能で、

新たなスニペットを作るのもそれほど難しくありません。

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

Copyrightを挿入するのに重宝してます。


(depends-on "flycheck")

flycheckは、各種言語に対して、編集中にlintやコーディングルールチェッカなどを走らせてくれます。(参考

すでにflycheck自身がメジャーな言語に対応しています。


;; Git


(depends-on "magit")

magitは、GitをEmacsから使うインタフェースを提供します(参考)。

インストールしたら、Gitリポジトリのあるディレクトリに移動してM-x magit-statusを打ちましょう(筆者はC-x g mにバインドしています)。

現在のリポジトリの状態が表示されるので、とりあえず?を押して説明を出してみましょう。


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

git-gutter-fringe+は、ウィンドウの左端に、GitのHEADからの差分がある行を表示してくれます(参考)。


(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に入っていないようなので入れてみました。


;; File


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

open-junk-fileは、書き散らかし用のファイルを作ってくれます。

M-x open-junk-fileで、任意の拡張子で日付付きのファイルを開いてくれます。


(depends-on "recentf-ext")

recentf-extは、recentfに便利な機能(最近開いたファイルを上へ、など)を提供してくれます(参考)。

recentf自体は、Emacsに「最近開いたファイル」機能を提供します。


;; Key


(depends-on "sequential-command")

sequential-commandは、同じキーを連続して押した時の動作をカスタマイズします(参考)。

組み込みの設定しか使っていませんが、そのなかでC-aおよびC-eの動作は秀逸です。

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


(depends-on "smartrep")

smartrepは、プレフィックスキーの入力を省略させてくれます(参考)。

multiple-cursorsとの応用例で見つけました。


;; auto-complete.el


(depends-on "auto-complete")

auto-completeは、編集中に自動補完の候補を上げてくれます(参考)。

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


(depends-on "ac-dabbrev")

ac-dabbrevは、auto-completedabbrevの候補を追加します。

バッファ内にあるシンボルを保管するのに便利です。


;; helm

(depends-on "helm")

helmは、"なんでも絞り込み"インタフェースです(参考)。

最近人気のpercolがこれに似てますね。


(depends-on "helm-git-grep")

(depends-on "helm-gtags")
(depends-on "helm-ls-git")
(depends-on "helm-themes")

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


;; 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と他のモードを組み合わせるのが定石でしたが、もうこれで十分ですね。


;;; Ruby

(depends-on "ruby-mode")
(depends-on "ruby-block")
(depends-on "ruby-end")

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

ruby-endは、最近使えなくなってしまったらしいruby-electricの代替です(参考)。

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


終わりに

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

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