AutoHotkey の Hotstring で現在日時を指定フォーマットで挿入する

例として

  • dt[[2017/12/27 08:45:45
  • dts[[171227_084546

こんな挿入を実現するにはどうすればいいか。

コード

; 終了文字無しで発動させる
#Hotstring *
; 自動置換後、最後に終了文字を入力しない
#Hotstring O
; http://ahkwiki.net/FormatTime
; http://ahkwiki.net/Send

::dt[[::
    FormatTime, now,, yyyy/MM/dd HH:mm:ss
    SendInput %now%
return

::dts[[::
    FormatTime, now,, yyMMdd_HHmmss
    SendInput %now%
return

解説

  • Hotstring という「指定文字を打つと何らかのアクションを実行する」機能を使う
  • もっというと、そのアクションとして「日付時刻文字列を挿入する」を実行してやる
  • 現在日時の文字列生成には FormatTime を使う
  • SendInput で文字列送信
  • #Hotstring XXX で Hotstring の挙動を色々変えられる。上記は私好み

TIPS(1): キャンセルは BackSpace ではなく Esc で

上記の例だと d, t, BackSpace, [, [ と入力しても dt[[ とみなされ 2017/12/27 08:49:09 みたいに現在日時が挿入されてしまう。

キャンセルしたいなら Esc キーを使う こと。d, t, Esc, [, [ と入力しても発動せずに済む。

TIPS(2): IME全角モードONの時でも半角のまま入力したい

上記の例だと、IMEで全角モードがONの時に d[[ と入力すると 2017・12・27 のように全角で入力されてしまう。

これを防ぐには以下のようにする。

::d[[::
    FormatTime, now,, yyyy/MM/dd
    Clipboard = %now%
    Send,^v
return

SendInput(一文字ずつ挿入するやり方)ではなく、Clipboard + Send(クリップボードにコピーした後、Ctrl + V を押させてそれを貼り付けるやり方)を使っている。

ただしこのやり方だと、挿入する度にクリップボード内容が上書きされてしまうことに注意。