ITエンジニアの種籾(たねもみ)

IT技術とか株式投資とか。

emacsでスニペットできるように環境を整える

2020年 08月 31日

目次

コードの断片を簡単に再利用できるとコピペの回数が減って便利ですよね。

スニペットが使いたい理由は、 markdownでタイトルや更新日時をyamlヘッダで記述してるんですが、 毎回、既存のファイルからコピペしているので、スニペット登録したいためです。

本記事では、emacsでスニペットするための以下のトピックを扱います。

  • yasnippetをインストールして有効にする
  • 自分でスニペットを登録して使ってみる

yasnippetをインストールする

“yasnippet”というパッケージを使います。 emacsには最初から入ってますが、インストールする場合は、

;; 下記をC-x C-e
(package-install 'yasnippet)

です。

設定する

有効にしてキーバインドを設定します。 ネットを見ると結構”C-x i”系にしているようなので、真似ました。

(require 'yasnippet)
(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)
(define-key yas-minor-mode-map (kbd "C-x i l") 'yas-describe-tables)
(yas-global-mode 1)

“yas-visit-snippet-file”の動きが怪しいので、使わないようにしています。 更新する場合は、直接ファイルをメンテしたほうが安全なので、yasnippetのコマンド使わずにファイルメンテしにいきます。

スニペットを登録する

試しにmarkdownでyamlのヘッダのスニペットを登録します。

markdownを開いて、yas-new-snippet(C-x i n)を呼び出します。 事前にテンプレートをコピーしておくといいです。

# key: header
# name: header
# --
---
title: ${1:title}
date: "${2:yyyy}-${3:mm}-${4:dd} ${5:hh}:00"
---

keyが呼び出される際のラベルです。 ${1}から${5}が入力フィールドで、コロン以降が入力前に表示されるサンプル文字列になります。

記述できたら、“C-c C-c”で反映します。

ちゃんとmarkdownファイルを開いている状態からyas-new-snippetしていれば、 モードを選ぶ必要ないですが、適当なバッファで作り始めてしまったらモードの指定が必要です。

keyがファイル名になるので、そのまま変更せずに保存すればよいです。

スニペットを使ってみる

markdownファイルでyas-insert-snippet(C-x i i)を呼び出します。

スニペットが1つしかない場合は、keyを選べずにその1つのスニペットが挿入されます。 複数スニペットがある場合は、バッファにkeyが列挙されるので、挿入したいスニペットを選びます。

入力フィールドは入力してTABで移動です。 入力せずに削除する場合は”C-d”です。

以上です。

広告