emacsのスニペット挿入やインクリメンタル補完/検索についてまとめた。
yasnippet/helmとは
yasnippetはemacsでスニペット挿入を支援する。
メジャーモードごとに設定を分離する設計になっており、elispでゴリゴリ書くより非常にわかりやすい。
helmはemacsでインクリメンタル補完/検索を行う。
使用箇所はバッファリストだけに止まらず多岐に渡る。
両者とも、ほぼデファクトスタンダードに近い。
インストール
- M-x package-install yasnippet
- M-x package-install helm
- M-x package-install helm-c-yasnippet
.emacs
ほぼ最小設定で使ってるが、M-n M-pで4行移動する設定だけ追加している。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| ;;;;;;;;;;;;;;;;;;
;; helm ;;
;;;;;;;;;;;;;;;;;;
(require 'helm)
(helm-mode t)
(define-key ctl-x-map (kbd "b") 'helm-mini)
; helm-mapからコピーされて使用される前に書きかえる
(defun helm-forward-4lines ()
(interactive)
(let ((i 0))
(while (< i 4)
(helm-next-line)
(setq i (1+ i)))))
(defun helm-backward-4lines ()
(interactive)
(let ((i 0))
(while (< i 4)
(helm-previous-line)
(setq i (1+ i)))))
(define-key helm-map (kbd "M-n") 'helm-forward-4lines)
(define-key helm-map (kbd "M-p") 'helm-backward-4lines)
;;;;;;;;;;;;;;;;;;;;;;
;; yasnippet ;;
;;;;;;;;;;;;;;;;;;;;;;
(require 'yasnippet)
(yas-global-mode t)
(setq yas-prompt-functions '(yas-ido-prompt))
;;;;;;;;;;;;;;;;;;;;;;
;; helm-c-yasnippet ;;
;;;;;;;;;;;;;;;;;;;;;;
(require 'helm-c-yasnippet)
(setq helm-yas-space-match-any-greedy t)
(global-set-key (kbd "C-c y") 'helm-yas-complete)
(push '("emacs.+/snippets/" . snippet-mode) auto-mode-alist)
(yas-global-mode t)
|
スニペットの登録
ここでは、org-modeで使えるHello Worldスニペットを登録する例で説明する。
まずは、org-modeのファイル(例:todo.org)を開く。
M-x yas-new-snippets
で新規登録。
以下の内容に修正し、保存する。
1
2
3
4
5
| # -*- mode: snippet -*-
# name: org-hello
# key: org-hello
# --
hello world
|
スニペットの挿入(基本)
org-modeのファイルで「org-hello[TAB]」と打つと「hello world」が挿入される。
スニペットの挿入(helm)
C-c y(M-x helm-yas-complete)を実行すると、以下のように今使えるスニペットの中からhelmでインクリメンタル検索で選択することが可能。
キーワードを忘れた場合など便利。
