うめすこんぶ

日々のプログラミングで残しておきたいメモ.何かの役に立てれば幸いです.

Yasnnipetで日付をささっと表示して日記を付けたい

スポンサーリンク

モチベーション

Emacsでよく日記のようなログを書くことがあります。今日あった出来事とか、 今日見つけたものとか。 そうゆうとき、日付をショートカットで入力できると便利です。それまでは、google日本語入力で、わざわざ「きょう」と入力して変換で「2015/03/04」という文字を打ってましたから。面倒です。

Yasnnipet使って、例えば「d」と入力するだけで日付を挿入できるようにしましょう。

方法

format-time-stringというElisp標準の関数を使います。 一般のRubyjavascriptがサポートしているように、あるフォーマットに従って日付の文字列を入れてくれます。

補足

  • M-x describe-functionを実行してformat-time-stringを入力すれば説明が出てきます。
  • M-x lisp-interaction-modeでバッファのモードをlisp解釈できるモードに変更できます。その後、
(format-time-string "%Y-%m-%d")

など入力してから、C-jとうってリターンすると、関数(ここではformat-time-string) の実行結果が出力されます。手軽に関数を実行でき、覚えておくと便利です。

format-time-stringとは

format-time-stringの主な使い方ですが、以下の文字列がそれぞれ年月日や時間に対応しています。基本的には、shellのdateとかでも変わらないですね。

文字列 出力結果
%Y
%m
%d
%w 曜日
%H
%M
%S
%N ナノ秒

使い方の例です。

(format-time-string "%Y-%m-%d %H:%M:%S.%N")

とすれば、"2015-03-04 22:42:56.844025000"という結果が出てきます。

補足

曜日ですが、%wだと日曜が0で0~6、%uだと月曜が1で曜日ごとに1~7の数字が出力されます。

yasnippetに設定する

  • yasnippetを使いたいモードでファイルを開く(例えば、.mdのファイルなど)
  • M-x yas-new-snippetで新しい設定ファイルの作成画面を開く

設定ファイルは例えば以下のように記述。以下では、"%Y-%m-%d"というフォーマットを使っているので、今の日付が挿入される。(ISO 8601 date formatという形式らしい。)

# -*- mode: snippet; require-final-newline: nil -*-
# name: currentdate
# key: d
# --
# `(insert (format-time-string "%Y-%m-%d"))`
$0

設定を書いたら、いつもどおりC-c C-cで設定を完了する。ファイルの編集バッファに戻ったら、早速dを押してTAB等でyas-expandしてみましょう。

# 2015-03-04というように今日の日付が出力されましたでしょうか?

Yasnippetについては、こちらの記事も参考にどうぞ。

Emacsテクニックバイブル ?作業効率をカイゼンする200の技?

Emacsテクニックバイブル ?作業効率をカイゼンする200の技?