yasnippet, anything-c-yasnippetのまとめエントリー

yasnippet関係の情報のまとめ、anything-c-yasnippetの更新状況などをまとめるエントリーです。

yasnippetとは?

pluskidさんが作っている超絶便利な、emacstextmate likeなsnippetを実現する拡張です。
id:antipopさんのところで紹介記事に、動画が貼り付けてあります。


凄さは動画で見るのが一番わかりやすいと思います。

anything-c-yasnippetとは?

anythingのインターフェイスでsnippetを選択->展開するためのanythingのconfigです。
snippetは便利なのですが最初にどのkeyで展開するか覚えないといけない点が少しめんどくさいです。


そこでanythingのインターフェイスを利用することで絞込み->選択が直感的にできるようになります。
選択後にminibufferにどのkeyに割り当てられているが表示されるのでよく使うsnippetは覚えられるというメリットもあります。


また、最近の更新でsnippetをリージョンから作る機能やreload等、補助的なActionを試験的に追加したりしたのでanythingからyasnippetの機能を使えます。


anything-c-yasnippetのアイデアは、id:rubikitchさんid:antipopさんのエントリーでanythingで絞り込めたら便利と話題になっていたのと、自分がosxtextmateというエディターを使っていた時にsnippetをなかなか覚られなかった経験が元になっています。
anythingが大好きで、何でもanythingからやりたいと思ったというのもあります。(それanythingでできるよ)

anythingとは?

hatenaキーワードの言葉を借りると、複数の動作をひとつのコマンドで行ってしまおうという汎用的elispフレームワークです。補完候補を絞込み実行するのが直感的に行えるのと 、ソースと言う形でプラグイン形式で機能が追加していけるのでBuffer切り替えや、history、imenu、abbrev、dabbrev、info、occur、などなど色々なコマンドを一まとめにできてしまう超絶便利な拡張です。
自分もrubikitchさんの記事を見てインストールし、心をがっつり持っていかれました。

anything.el本体についてくる設定はデモ用のほんの一部なので一緒にanything-configもダウンロードして設定するのがお勧めです。

自分が特に参考にさせていただいたいるサイトは以下です。


いろいろ設定すると凄く面白くなってきます。
anything選択画面のキーバインドもanything-configの設定の方が直感的だと思うので入れるのがお勧めです。

anything-c-yasnippetのインストール方法

anything-c-yasnippetのソースはcodereposにて公開されています。
以下から最新版をダウンロードできます。

svn: http://svn.coderepos.org/share/lang/elisp/anything-c-yasnippet/anything-c-yasnippet.el


codereposからダウンロードできるanything-c-yasnippet.elのほかに


が必要です。
各ライブラリをダウンロードし、パスの通った場所に置き、.emacsに設定をします。


anything-c-yasnippetの使い方は単体で起動する方法と、anything-c-source-yasnippet をanythingのコンフィグに入れて使う方法の二通りあります。

  • anything-sourceを一時的に変更してanythingを起動するコマンド `anything-c-yas-complete' をキーバインドに割り当てて使う(お手軽なのでお勧め)
  • anything-sourcesに anything-c-yasnippetの source `anything-c-source-yasnippet' を追加する。


以下に自分の現在のyasnippet設定を書いておきます。前回のエントリーの時と変わっていません。

(require 'yasnippet)
(require 'anything-c-yasnippet)
(setq anything-c-yas-space-match-any-greedy t) ;スペース区切りで絞り込めるようにする デフォルトは nil
(global-set-key (kbd "C-c y") 'anything-c-yas-complete) ;C-c yで起動 (同時にお使いのマイナーモードとキーバインドがかぶるかもしれません)
(yas/initialize)
(yas/load-directory "<path>/<to>/snippets/") ;snippetsのディレクトリを指定
(add-to-list 'yas/extra-mode-hooks 'ruby-mode-hook)
(add-to-list 'yas/extra-mode-hooks 'cperl-mode-hook)

複数のディレクトリからsnippetsを登録する方法やyasnippet展開中はflymakeを無効にする方法などはid:antipopさんのエントリーに詳しく書かれています。

使い方

起動ー>snippet絞込み -> enter -> snippet挿入
起動ー>TABでアクション選択 -> 各動作

Actions 説明

Insert snippet

選択したsnippetを展開します。

Open snippet file

選択したsnippetのファイルを開きます。

Open snippet file other window

選択したsnippetのファイルを別のウィンドウで開きます。

Create new snippet on region

選択されているリージョンを元に新しいsnippetを作成する。

snippetの作成補助のActionです。
現在のメジャーモードのsnippetディレクトリをデフォルトにファイル名を聞いてくるので作るsnippetのファイル名を入力するとsnippetを簡単に作ることができます。
name 等のyasnippetの書式のテンプレートを自動で挿入してくれたりするので少し便利です。

Reload All Snippts

snippetsファイルをリロード(再読み込み)します。
yasnippet.elの `yas/reload-all' コマンドです。

Change file name

選択したsnippetのファイル名を変更します。
keyを自分好みに変えたいときなどに便利です。
今のところこのコマンドで名前を変更したsnippetをOpen snippet fileで開けるようになるのはemacs再起動後です。

Delete snippet file

選択したsnippetのファイルを削除します。
このアクションは、あまり使う必要は無いと思います。

snippetの入手先など

公式のwikiでダウンロードできるサイトが掲載されています。
また、id:antipopさんの呼びかけによりcodereposでのsnippet共有が始まってます。

http://coderepos.org/share/browser/config/yasnippet/


凄いアイデアですよね!!
snippetをcodereposで共有すればみんな幸せになれるし、こんな書き方できるんだ!的な良いidiomとめぐり合えるはず。
anythingから使えばたとえ同じようなsnippetがあっても問題無しですしね。


一人が5個snippetを作ったとしてその人が三人の人にcodereposを紹介して、そしたらまた三人の人に紹介して。
そうすると紹介もとの人は使えるsnippetが増えていって・・・。 どっかで聞いたようなみんな幸せになれる仕組みですね!! yasnippet 夢広がリング!


yasnippet本体の開発も活発でこれからさらに充実していくと思われるので凄く楽しみです。

その他

yasnippetのデータからsnippetをとってくる作りに変えた際に機能しなくなったので
version0.3からanything-c-yasnippet-appear-ruleをなくしました。これは補完候補にyasnippetの持っているsnippetsのデータを使うようにしたので問題ないと思います。
なにか不具合があったり、こんな機能ほしいよ!!見たいなのがあったら突っ込み歓迎です。。