先日に引き続きPythonでVimに挑戦。
コマンドラインで書き込んだメモをファイルに蓄積していくVimプラグインを書いてみた。
画面に表示している内容とまったく関係ないふとした思いつきを書き込む。
:PyMemoAdd メモ
のような感じで使う。
pymemo.vim
if has('win32') let s:vim_encoding = "shift_jis" else let s:vim_encoding = "utf-8" endif if !exists("g:pymemo_filepath") let g:pymemo_filepath = $HOME . "\\pymemo.txt" endif if !exists("g:pymemo_loaded_python_file") pyfile <sfile>:p:h/pymemo.py python memo = PyMemo() let g:pymemo_loaded_python_file=1 endif command! -nargs=1 PyMemoAdd python memo.add_memo(<q-args>)
pymemo.py
# vim:set fileencoding=utf-8: # メモ用Vimスクリプト # # 指定されたファイルにどんどんメモを追加する import vim import sys import codecs import os import re import datetime LINE_HEADER = "*" UNI_FILE_HEADER = """vim:set filetype=rest: = PyMemo ==================== """ DATE_TEMPLATE = "[%Y-%m-%d %H:%M]" class PyMemo(): def __init__(self): self.vim_encoding = vim.eval("s:vim_encoding") self._memo_path = None def add_memo(self, text): self._append_to_file(text) print u"メモを追記しました".encode(self.vim_encoding) def _enc_command(self, command): vim.command(command.encode(self.vim_encoding)) def _enc_eval(self, command): return vim.eval(command.encode(self.vim_encoding)) def _append_to_file(self, line): day = datetime.datetime.now().strftime(DATE_TEMPLATE) if not os.path.exists(self._get_memo_path()): f = open(self._get_memo_path(), "w") f.write(UNI_FILE_HEADER) f.write("%s\n\n" % (day,)) else: f = open(self._get_memo_path(), "a+") f.write("%s %s %s\n" % (LINE_HEADER, line, day)) f.close() def _get_memo_path(self): if self._memo_path == None: self._memo_path = vim.eval("g:pymemo_filepath") return self._memo_path