vimのメモ取り環境
僕は全てのメモを「Gmailで自分宛てに送信」して記録している。 インストールログや便利なツールのメモ、数学のパズル、役所の手続きから買い物リストまで、何もかもをGmailに送信しているのだ。 リマインダもToDoリストも全てメール管理。 閲覧は主にスマホとPCのブラウザで、検索はGmailの検索窓を使っている。
話は変わるが、人生とgitの最大の違いは因果律にあると思う。
人生にタイムマシンは存在せず、git reset --hard
やgit rebase
などの便利コマンドもなく、ひたすらコミットを積み重ねることしかできない。
メモは人生のコミットログであり、その媒体に相応しいのは再編集不可能なメールだと、僕は思う。
EvernoteやSlackを使いこなす意識の高い連中には分かるまい~
だいぶ脱線したが、僕のWindowsのメモ取り環境は以下のような感じ。
コンセプトは「とにかく素早いメモ書き」「原始的」の2点。 後者について補足すると、vimプラグインは一切使わず、vim以外のフリーソフトも一切使わず、Windows謹製の機能だけで手軽なメモ取り環境を作りたい。 ちなみにLinuxやMacだと、msmtp等を使えば原始的なメモ環境の構築など造作も無いので、今回は(厄介な)Windowsに焦点を絞った。
Windowsでvimを即座に起動する
パスの通ったディレクトリにgvim.exeへのショートカットリンクgvim.lnk
を設置すれば、上で書いた
が実現できる。起動時間の短縮には、やはりマウスよりキーボードの方が向いていると思う。
参考:http://www.kamomer.com/entry/windows10-run-filename
gvim.exeの起動は簡単だが、問題はメモ内容をメール送信する部分だ。これを外部ツールに頼らずに実現したい。
vimで書いたメモをSMTPでGmailに送信
まず以下のsendGmail.vbs
というファイルを、:set fenc=cp932で保存する。
このファイルは標準入力を受け取ってメール送信するVBSスクリプト。
Dim objStdIn Dim intExitCode Set objStdIn = Wscript.StdIn Set cdo = Wscript.CreateObject("CDO.Message") With cdo .From = "hoge@gmail.com" .To = "hoge@gmail.com" .Subject = "自分用メモ" .ReplyTo = "hoge@gmail.com" .Textbody = objStdIn.ReadAll .BodyPart.Charset = "Shift-JIS" end With schemas_url ="http://schemas.microsoft.com/cdo/configuration/" With cdo.Configuration.Fields .Item (schemas_url & "sendusing") = 2 .Item (schemas_url & "smtpserver") = "smtp.gmail.com" .Item (schemas_url & "smtpserverport") = 465 .Item (schemas_url & "smtpconnectiontimeout") = 30 .Item (schemas_url & "smtpusessl") = true .Item (schemas_url & "smtpauthenticate") = true .Item (schemas_url & "sendusername") = "hoge@gmail.com" .Item (schemas_url & "sendpassword") = "パスワード" .Update end With cdo.Send
再度注意するが、sendGmail.vbsは:set fenc=cp932で保存するように!。 パスワードは平文直書きで、セキュリティコストは自腹。ワイルドだろう?
次に~/.vimrc
に以下を追加
command! Gmail set fenc=cp932 | w !cscript C:/Path/To/sendGmail.vbs " Markdownで書く場合はfiletype切替コマンド(sm)を自作すると便利 nnoremap sm :<C-u>set filetype=MARKDOWN<CR>
以上で設定は終わりだ。
使い方は冒頭で説明したが、vimでメモを書いた後コマンドラインモードで
:Gmail
とすれば、メモがGmailに送信される。めでたしめでたし。
蛇足
メールをUTF-8で送りたかったので、sendGmail.vbs
の
.BodyPart.Charset = "Shift-JIS"
のあたりをいじくり回したのだが、うまくいかなかった。 普通メールの文字コードといえばiso-2022-jpなのだが、windowsでコードを変換するには外部のソフトウェアが必要になる(たぶん)。 少なくとも僕の環境では、vim単体で無名バッファ(UTF-8)をiso-2022-jpに変換することができなかった。 またVBSスクリプトでメールを送信する際も、UTF-8は扱いづらいようだった。
" 変換に失敗する :set fenc=iso-2022-jp :w " うまくいく :set fenc=cp932 :w
文字コードをcp932(Shift-JIS)にしておけば、vimもVBSスクリプトもハマることなく動作した。 やはりWindowsではShift-JISが最強なのだと思いました。