yasnippet¶
今度は、auto-complete並に汎用的なyasnippetを、el-getを使って導入します。
init.el への記述¶
基本的に以下を記述するだけで、デフォルトのsnippetは使えるようになります。
(el-get-bundle yasnippet)
記述したらEmacsを再起動させてみましょう。
yasnippetを使ってみる¶
デフォルトのsnippetは、 yasnippet/snippets
ディレクトリにあります。
試しに yasnippet/snippets/js-mode
以下を見てみると、 log
という名前のファイルがあり、
以下のような中身になっています。
$ cat yasnippet/snippets/js-mode/log
# -*- mode: snippet -*-
#name : console.log
# --
console.log($0);
これは js-mode で有効なsnippetなので、Emacsでjs-modeを起動させた後に、
log
と入力してTABを押すと、このsnippetが補完されます。
Emacsをjs-modeで起動する一番簡単な方法は、.jsの拡張子がついたファイルを開くことです。
$ emacs test.js
これで、 log
と入力した後にTABをれると、 console.log();
と補完されるハズです。
自作のsnippetを登録するためのディレクトリの設定をする¶
自分でスニペットを登録したり、どこかからダウンロードしたスニペットとyasnippetに読み込ませるために、 スニペットを保存するディレクトリを設定します。
(setq yas-snippet-dirs '((locate-user-emacs-file "snippets")))
一方で、 ~/.emacs.d/snippets
ディレクトリを作成しておいてください。
このsnippetsディレクトリはgit管理下に置いておくとよいでしょう。
スニペットを新規作成する¶
試しに先ほど同じのjs-modeでスニペットを新規作成します。
M-x yas-new-snippet
を入力してください。
# -*- mode: snippet; require-final-newline: nil -*-
# name:
# key:
# binding: direct-keybinding
# --
入力するのは、name, key, そして --
以下のスニペット本体です。
- nameはわかりやすい名前で良いです。
- keyにあたるものを入力してtabを押すと、スニペットが展開されることになります。
試しにこのようなスニペットを入力してみました。
# -*- mode: snippet; require-final-newline: nil -*-
# name: put
# key: put
# binding: direct-keybinding
# --
console.log('${1:debug} ${2:value}: ' + $2);$0
$1
,$2
, ... は、TABを押すごとに数字の順にカーソルが移動し、 一番最後に行き着くのが$0
の部分です。${1:hoge}
のような記述をすると、hoge
はプレースホルダーになります。- 当然ながら、同じ数字の場所は、片方入力するともう片方にも同じ値が入ります。
C-c C-c
を押すとスニペットを保存します。
Choose or enter a table (yas guess js-mode):
と表示されます。 これがjs-modeのスニペットならそのままEnter、そうでないならモード名を入力してください。[yas] Looks like a library or new snippet. Save to new file? (y or n)
と聞かれるのでy
を押して保存します。Guessed directory (~/.emacs.d/snippets/js-mode) for table "js-mode" does not exist! Create? (y or n)
と聞かれます。 js-modeのスニペットだからsnippets/js-mode
に保存したいが、js-modeディレクトリがないので作ります。よろしいですか?ということです。 よろしいのでy
と答えます- ファイル名をどうするか聞かれます。デフォルトではnameと同じ値が入っているので、それでよければEnterを押します。
これでsnippetの保存ができました。早速保存したsnippetを使ってみます。
yas-new-snippet
で登録したスニペットは、すぐに使えるようになります。
put
と入力しTABを押してみましょう。
値を入力してみたり、TABでキーを移動させてみたりしましょう。
~/.emacs.d/snippets
以下が正しく読み込まれていることを確認するために、
一旦Emacsを終了させてみて、スニペットが働くかどうかを確認しましょう。