きっかけ

autodate.vim は普通ではLast Change:.の間に日付を入れるが、 Jekyll用にFront-matterに入れてテンプレから呼び出して使いたい。

参考

設定方法

ファイルタイプごとにタイムスタンプの形式を変える

Windowsの場合
$HOME/vimfiles/ftplugin
Mac OSXの場合
$HOME/.vim/ftplugin

というディレクトリを作って、 そのディレクトリ内にそれぞれのファイルタイプ用の設定ファイルを用意すれば良い。

例えば、

  • htmlのファイルタイプの場合は、 html.vim
  • javaのファイルタイプの場合は、 java.vim

を用意して、その中にそれぞれのファイルタイプ用の設定を書きます。 すると、ファイルを開いた時にそれぞれのファイルタイプ用の設定が読み込まれます。

b:をつけて、バッファローカルな設定にすると更に良いです。

:let b:autodate_keyword_pre = 'Date:'

ftplugin ディレクトリにファイルタイプ毎の設定ファイルを記述すればいいようだ。

ftplugin ディレクトリの場所

から定石だと~/.config/nvim/ftpluginになるが、せっかく dein.vim でパッケージ管理しているので、 autodate.vim 用に ftplugin を分離したい。

よし。githubでforkして ftplugin を加えたものを作ろうという考えに至った。

autodate.vim をforkしてgit cloneする

もっとも、プラグイン自体のライセンスがよくわからない。 従って苦情がきたらこの方法は使えない。

まずはgithub上でautodate.vimをforkする。

適当なディレクトリで

git clone https://github.com/yourgithub/autodate.vim

し、中に ftplugin を作って編集する。

まず.mdファイルがどんなファイルタイプとして読み込まれているか確認する。

じつは &filetype だけだった

恥ずかしい話、取得できそうなのにできないな…と思っていたら、

&filetype

とするだけだった。

例えば、hoge.py を開いているときに

:echo &filetype

とすれば

python

と出力される。

.mdファイルを開いている状態で:echo &filetypeをしてみると

markdown

と表示された。

なのでautodate.vim/ftplugin/markdown.vimに変更内容を記述する。

date A date here overrides the date from the name of the post. This can be used to ensure correct sorting of posts. A date is specified in the format YYYY-MM-DD HH:MM:SS +/-TTTT; hours, minutes, seconds, and timezone offset are optional.

「autodate_format」で、autodate.vimスクリプトで挿入されるタイムスタンプのフォーマットを 指定することができます。

設定 デフォルト値 設定例
autodate_format %d-%3m-%Y :let autodate_format=” %Y/%m/%d %H:%M:%S “

タイムスタンプのフォーマットの指定例を一通り、下に書いておきます。

タイムスタンプのフォーマット 出力例
%Y/%m/%d 2004/09/27
%H:%M:%S 13:06:32
%y%m%d-%H%M 040927-1308
%d-%3m-%Y 27-Sep-2004
%Y/%m/%d %H:%M:%S 2004/09/27 13:06:32
%c Sun Apr 27 11:49:23 1997
%Y %b %d %X 1997 Apr 27 11:53:25
%y%m%d %T 970427 11:53:55

Jekyllのdateにフォーマット合わせるべきかなと思うので、

let b:autodate_format = "%Y-%m-%d %H:%M:%S"

としましょう。

ハッシュ形式

ハッシュはキー:[半角スペース]値の形式で表します。コロンのあとに必ず半角スペースを 1 つ以上入れてください。

最初詰めて記述したらFront Matter部分でJekyllがエラーを吐いた。YAMLはスペースでハッシュと値に分けている。 なのでprepend文字列にスペースを入れるようにした。

let b:autodate_keyword_pre  ='lastchange : '

autodate.vim/ftplugin/markdown.vimはこうなった。

let b:autodate_keyword_pre  ='lastchange : '
let b:autodate_keyword_post ='.'

let b:autodate_format = "%Y-%m-%d %H:%M:%S"

変更をgithubにpushする

変更した autodate.vim をgithubにpushする。

git add .
git commit
git push

tomlファイルの変更

dein.vim のtomlを変更する

[[plugins]]
repo = 'yourgithub/autodate.vim'

VimRで読み込む

カスタマイズしたプラグインを読み込む。

call dein#install()

インストール後、プラグインの内容を変更した場合は改めてgithubへpushし、

call dein#update()

を行う。

変更日時を読み込む

Front-matterにListとHash構造を定義する

まず、Front-matter及びbody部をこのように定義してみます。

---
title: template1
layout: default
hash1:
  name: Hash構造
  value: 値が入る
list2: 
  - 一番目
  - 二番目
---
{{ page.hash1.name }}<br />
{{ page.hash1.value }}<br />
<br />
{% for data in page.list2 }}
{{ data }}<br />
{% for data in page.list2 }}
{{ data }}<br />
{% endfor %}

結果はこうなります。

Hash構造
値が入る

一番目
二番目

ポイントは、記述した定義は全て”page”というhashに格納されるということです。

Front Matterで

lastchange : .

と書いておくと自動的に最終変更日がセーブ毎に挿入される。

挿入された変更日は

{{ page.lastchange }}

でページに挿入される。

実際にやってみるとこうなる。

2017-06-17 02:13:24 +0000