emacs 最強スニペット展開プラグイン yasnippet.elのインストール!
スポンサーリンク
目次
- なにこれ?
- ダウンロード
- 基本の設定
- キーバインド設定
- スニペットを試す
- オリジナルのスニペットを新規作成
- 参考
- 上記以外のエラー
- タブでスニペット展開しようとしたら,展開できない問題
- 古い記事を見て設定しようとする時の注意
- その他
なにこれ?
はじめにこの動画を見てもらうとわかりやすいです.
http://www.youtube.com/watch?feature=player_embedded&v=vOj7btx3ATg
スニペットというのは,キーとなるコマンドや数文字を打ち込むだけでコードをばっと展開してくれるもののことです. これが使えるとコードを書くときのタイピング数もすこぶる減らすことが可能なんですね. 絶対おすすめ!ぜひ入れましょう!
ダウンロード
以下のgithubからソースをダウンロード.~/.emacs.d/site-lisp
上に置く.
- yasnipet本体のダウンロード: AndreaCrotti/yasnippet-snippets
- スニペット例のダウンロード capitaomorte/yasnippet
基本の設定
emacs設定ファイル(init.el等)を開いて以下のコードを追記.
;; yasnippetを置いているフォルダにパスを通す (add-to-list 'load-path (expand-file-name "~/.emacs.d/site-lisp/yasnippet")) ;;自分用のスニペットフォルダと,拾ってきたスニペットフォルダの2つを作っておきます. ;;(一つにまとめてもいいけど) (require 'yasnippet) (setq yas-snippet-dirs '("~/.emacs.d/mySnippets" "~/.emacs.d/snippets" )) ;; yas起動 (yas-global-mode 1)
キーバインド設定
コマンド一覧です.ちなみに,キーバインドですが,初期設定'C-c & C-n' などありますが,押しにくいので,自分でキーバインド変えましょう.
初期バインド | 自分用バインド | コマンド名称 | 説明 |
---|---|---|---|
C-c & C-n | C-x i n | yas-new-snippet | スニペット新規作成 |
C-c & C-s | C-x i i | yas-insert-snippet | スニペットを選択して挿入 |
C-; y | なし | yas/insert-snippet | yas-insert-snippetと同じ機能?使用してません |
C-c & C-v | C-x i v | yas-visit-snippet-file | 編集中のファイルに関連するスニペットを選択して編集できる |
init.el設定
yasnippet 8.0の導入からスニペットの書き方、anything/helm/auto-completeとの連携 - Web学びを参考にさせていただきました.ありがとうございます!
;; 既存スニペットを挿入する (define-key yas-minor-mode-map (kbd "C-x i i") 'yas-insert-snippet) ;; 新規スニペットを作成するバッファを用意する (define-key yas-minor-mode-map (kbd "C-x i n") 'yas-new-snippet) ;; 既存スニペットを閲覧・編集する (define-key yas-minor-mode-map (kbd "C-x i v") 'yas-visit-snippet-file)
スニペットを試す
設定出来ましたら試してみましょう.
適当にtest.c
などのCファイルを作ってみて,if
と打ち,TABキーを押します.
すると,うまく行けばスニペットが展開されて,下の図のようになります.
今色が付いているcondition
のところを適当に書いてまたTABを押すと,
if (true) { @ }
このコードの@の部分にカーソルが飛び,すぐにif文の中身を編集できる状態になります.
ここまで来るのに時間がかかったので,感動も一入.また,色付き部分を編集中にやっぱif文いらないなど辞めたくなったら,とりあえずC-g
でquitしましょう.
[yas] elisp error! Symbol's function definition is void: end-of-file[yas] elisp error! Symbol's value as variable is void: lisp[yas] elisp error! Symbol's function definition is void: end-of-file
オリジナルのスニペットを新規作成
- 自分でオリジナルのスニペットを作る場合,とりあえず`C-i nで新規作成画面に移ります.
- この画面の,# --までがコメント.
# --
以降が展開されるスニペットになります.nameとkeyと,スニペットを書きます.今回はjavascriptでログを出すためのスニペットを書いてみました.
# -*- mode: snippet -*- # name:console # key: cons # binding: direct-keybinding # expand-env: ((some-var some-value)) # type: command # -- console.log($0);
- エラーがでるので,
# binding: direct-keybinding # expand-env: ((some-var some-value)) # type: command
の部分は消しておきます.
C-c C-c
でセーブ.- ミニバッファに
Choose or enter a table (yas guesses js2-mode):
と出る→モードを選んでエンター. [yas] look a liblary or new snippet. Save to new file
→ yで.- ファイル名を聞かれるので記入してエンター.
スニペット作成画面で使えるコマンド
ご参考.
バインド | コマンド名称 | 説明 |
---|---|---|
C-c C-c | yas-load-snippet-buffer-and-close | スニペットを保存する |
C-c C-l | yas-load-snippet-buffer | スニペットをロードして使える状態にする(使う意味があまりない) |
C-c C-t | yas-tryout-snippet | スニペットを試す(エラーが起こって使用できない…) |
試す
javascriptのファイルを開き,cons
と押してTAB.うまく出れば成功!
その他
スニペットのもっと高度な書き方はWriting snippetsを参考に.
古い記事を見て設定しようとする時の注意
(yas/initialize)
と書いてありますが,最新版ではこれらのコードは
(yas-global-mode 1)
が代わりになってくれています.
タブでスニペット展開しようとしたら,展開できない問題
コマンドをうって展開コマンド(TAB)を打つと,ヒュン!って左に移動して,コマンドが消える謎現象が起こりました.ずっと解決できませんでしたが,やっと解決方法が分かりました.
M-x yas/new-snippet
ででるスニペット新規作成画面.
このなかで
# binding: direct-keybinding # expand-env: ((some-var some-value)) # type: command
となっているところを消しましょう.消したら保存してもう一度コマンドを試して見てください.
それでもダメならemacs再起動やM-x yas-load-directory
でスニペットをロードし直しますとうまくいきました.
上記以外のエラー
また,TABキーがyas-expandにバインドされていない場合もあります.
それを確認するときは,M-x describe-key
でリターンしてTABキーを打ち込んでください.
その時に出るウインドウに
<tab> runs the command yas-expand, which is an alias for `yas-expand-from-trigger-key' in `yasnippet.el'.
とでればOKです.出なかったらemacsの設定ファイルを見直しましょう.
- 設定の仕方:
(custom-set-variables '(yas-trigger-key "TAB"))
参考
yasnippet 8.0の導入からスニペットの書き方、anything/helm/auto-completeとの連携 - Web学び helmとの連携方法も.