組み込みProgrammerのチラシの裏

Yasnippet/helm

| Comments

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でインクリメンタル検索で選択することが可能。 キーワードを忘れた場合など便利。

helm-yas-complete

Comments