Vimで現在の日付・時刻を挿入する方法(strftime)
議事録やメモを書いているとき、Excelの「現在日時の挿入」ショートカットのような機能がVimにも欲しくなります。プラグインを入れなくても、標準のstrftime()関数を使えば、好きなフォーマットで日付・時刻を挿入できます。
基本の書き方
:put =strftime('%Y/%m/%d')
:putは式の評価結果をカーソル行の下に挿入するコマンドです。strftime()にフォーマット文字列を渡せば、任意の形式で現在日時の文字列を生成できます。
## 議事録
:put =strftime(...)## 議事録
2026/08/05
フォーマット文字列を変えれば、時刻だけ・日時両方など自由に整形できます。
:put =strftime('%Y/%m/%d') " 2026/08/05
:put =strftime('%H:%M:%S') " 14:30:00
:put =strftime('%Y/%m/%d %H:%M:%S') " 2026/08/05 14:30:00
インサートモード中に挿入する
文章を書いている途中でカーソル行に改行を挟まず埋め込みたい場合は、式レジスタを使います。
Ctrl-r =strftime('%Y/%m/%d')<CR>
インサートモード中にCtrl-rの後=を押すと式レジスタの入力になり、評価結果がその場に挿入されます。:putと違って改行を挟まない点が使い分けのポイントです。
:put =strftime(...)、文中にそのまま埋め込むならCtrl-r =strftime(...)。キーマッピングで呼び出せるようにする
毎回打つのは手間なので、設定ファイルにマッピングしておくと便利です。
nnoremap <leader>dt :put =strftime('%Y/%m/%d')<CR>
inoremap <C-g>t <C-r>=strftime('%Y/%m/%d')<CR>
ノーマルモード用とインサートモード用の両方を用意しておくと、書いている途中でも呼び出しやすくなります。曜日を含めたい場合は%a(英語略称、例:Mon)を組み合わせます。
:put =strftime('%Y/%m/%d (%a)')
コマンド化してさらに短くする
マッピングだけでなく、ユーザー定義コマンドとして名前を付けておくとさらに呼び出しやすくなります。
command! Today put =strftime('%Y/%m/%d')
command! Now put =strftime('%Y/%m/%d %H:%M:%S')
コマンド名を打てば補完も効くので、マッピングを忘れてしまったときでも:Todまで打ってTabで補完すれば思い出せます。議事録用のテンプレートファイルと組み合わせて、ファイルを開いた瞬間に日付が入るようにするautocmdと合わせて使う人もいます。
よく使うフォーマット指定子
| 指定子 | 意味 |
|---|---|
%Y | 4桁の年 |
%m | 2桁の月 |
%d | 2桁の日 |
%H:%M:%S | 時:分:秒 |
%a | 曜日の英語略称 |
議事録用のMarkdownファイルの見出しに日付を入れる作業が多く、leaderキーにstrftimeのマッピングを仕込んでからは手打ちしなくなりました。プラグインなしで標準関数だけで完結するので、環境を移しても設定ファイルをコピーするだけで同じように動くのも気に入っています。
まとめ
現在日時の挿入はstrftime()関数だけで完結します。:putと式レジスタを使い分け、よく使うフォーマットはキーマッピングしておくと、Excelのショートカットのような感覚で呼び出せます。