Vim のキーマップ例: ショートカットキーで日時を挿入する

ショートカットキーで strftime 関数を実行する

Vim で以下の設定をしておくと、ショートカットキーで 2014-01-27 のような本日の日付を挿入することができます。 ここでは、Ctrl-DCtrl-D というキーコンビネーションに割り当てていますが、任意の組み合わせに変更することができます。

~/.vimrc(Ctrl-D Ctrl-D で日付を挿入)
imap <silent> <C-D><C-D> <C-R>=strftime("%Y-%m-%d")<CR>
nmap <silent> <C-D><C-D> <ESC>i<C-R>=strftime("%Y-%m-%d")<CR><CR><ESC>
  • imapnmap の両方で定義しているので、挿入モードのときも、ノーマルモードのときも、ショートカットキーを入力して日付の挿入を行うことができます。
  • <silent> を入れることで、コマンドラインのエコーを防いでいます。
  • <C-R>= というのは、その後ろに記述した式を実行して展開するためのイディオムです(= は Expression register を示しており、詳細は :help i_Ctrl-R で確認できます)。

日付の挿入を頻繁に実行するのであれば、F1 キーのような単独キーに割り当てるようにすれば、さらに手軽に実行できるようになります。

~/.vimrc(F1 キーで日付を挿入、F2 キーで日付+曜日を挿入)
imap <silent> <F1> <C-R>=strftime("%Y-%m-%d")<CR>
imap <silent> <F2> <C-R>=strftime("%Y-%m-%d (%a)")<CR>

ちなみに、F1 キーはデフォルトではヘルプの起動 (:help) のショートカットキーとして設定されているため、上記のように設定すると、F1 キーでヘルプを起動することはできなくなります(まったく問題ないと思いますが)。 また、キーシーケンスの都合で、Ctrl-1 といった Ctrl キーと数字キーの組み合わせはうまく動作しません。

strftime 関数のフォーマット一覧

Vim の strftime のフォーマット文字列で使用できる記号 (%Yなど)は、C 言語の strftime 関数と同様のものです。 なので、Linux 環境や macOS 環境であれば、下記のようにして C 言語の man ページで詳細を確認できます。

C 言語の strftime のドキュメントを表示
$ man 3 strftime

下記はフォーマット文字列と、その出力の例です。

呼び出し方実行結果
strftime("%Y-%m-%d")2018-10-28
strftime("%Y-%m-%d (%a)")2018-10-28 (日)
strftime("%Y-%m-%d %H:%M:%S")2018-10-28 20:46:18
strftime("%c")日 10/28 20:52:24 2018
strftime("%Y %b %d %X")2018 10 28 20時53分37秒
    • %Y: 4桁の年 (例: 2018
    • %y: 2桁の年(例: 18
    • %m: 2桁の月(0112
    • %B: 月の名前(米国では December、日本では 12月 など)
    • %b: 月の略称(米国では Dec、日本では 12 など)
    • %d: 2桁の日付 (例: 28)
  • 曜日
    • %A – 曜日の名前(米国では Sunday、日本では 日曜日 など)
    • %a – 曜日の略称(米国では Sun、日本では などになる)
    • %H – 24時間表示の時(0023
  • その他
    • %X – 時刻の標準的な表示(米国では 20:53:37、日本では 20時53分37秒 など)
    • %c – 日付+時刻の標準的な表示(米国では Sun Oct 28 20:52:24 2018、日本では 日 10/28 20:52:24 2018 など)

簡単に strftime の出力を確認してみたいときは、:echo コマンドを使うのが便利です。

:echo strftime("%c")

あるいは、インサートモードで Ctrl-R=strftime("%c") と入力して、カーソル位置に実行結果を挿入することもできます。