まくまくVimノート
ショートカットキーで日時を挿入する
2014-01-27

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

以下の設定をしておくと、ショートカットキーの入力で 2014-01-27 のような本日の日付を挿入することができます。 ここでは、ショートカットキーを CTRL-D CTRL-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 strftime("%c") のように実行します。あるいは、インサートモードで CTRL-R= に続けて strftime("%Y-%m-%d") のように入力すれば、カーソル位置に実行結果を挿入することができます。
2014-01-27