Vimで「日付+曜日」がパッと出るようvimrcに設定する

vimrcに以下のように入れておくと、

inoremap <expr> ,df strftime('%Y-%m-%d %H:%M')

インサートモードで「,df」と打ったときに「2015-09-19 20:41」みたいに出てくる。

同様に、

inoremap <expr> ,dd strftime('%Y-%m-%d')
inoremap <expr> ,dt strftime('%H:%M')

としておくと、日付だけとか時刻だけ出てくるようにも設定できる。

これらは技評さんの以下のムックで知ったのだけど(P145)、

開発ツール徹底攻略 (WEB+DB PRESS plus)

開発ツール徹底攻略 (WEB+DB PRESS plus)

ぼくは普段から日付とあわせて曜日を記入することが多いので、できれば上記に加えて「2015-09-19 Sat」みたいに、似たようなストロークで曜日も一瞬で出てくるようにしたいな〜とはずっと思っていて、でもなかなかそれを調べる機会もないまましばらく月日が流れてしまった。

それがついさっき、ふと気分転換がてらこの方法を検索してみたら、すぐに以下の記事が出てきて、

ようは上記で「%d」とか「%H」とかしているように、「%A」と記述すれば曜日名、「%a」とすればその略記が出てくるという。

いやあ・・随分あっさり判明したものだ、もっと早く検索しておけばよかった、てっきりVim scriptとか勉強しなきゃいけないかと思ってたよ〜、などと思ったのだけど、その設定のままだと自分の環境では「土曜日」とか「土」といった日本語表記しか出てこないので、英語で曜日を出したい自分としてはちょっと惜しい。

しかしそこもまたすごいもので、同記事には曜日の表記を英語にする方法もきっちり紹介されていて、

:echo strftime("%w")
"# => 4
:let weeks = [ "Sun.", "Mon.", "Tue.", "Wed.", "Thu.", "Fri.", "Sat." ]
:let wday = strftime("%w")
:echo weeks[wday]
"# => Thu.

とすればよいのだと言う。

なるほど・・と思ったのだけど、でもこれ、vimrcにどう記述すればいいのか、ということまではさすがに書いていない。
ということで、しばらく試行錯誤したのだけど、たとえば以下のようにやってみると、

let weeks = [ "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" ]
let wday = strftime("%w")
inoremap <expr> ,dw strftime('%Y-%m-%d weeks[wday]')

こんな風に出たりして、

2015-09-19 weeks[wday]

なんか違う。これじゃない。

で、しばらくあーだこーだいじって、出力部分を以下のようにドットでつなげた上で、

inoremap <expr> ,dw strftime('%Y-%m-%d ').weeks[wday]

「,dw」と叩くと、できた。

2015-09-19 Sat

リンク先の記事を書かれた小見さん、そして冒頭のムック記事を書かれたkanaさん、ありがとうございました。

f:id:note103:20150920084923g:plain