ほんじゃら堂

めんどくさい仕事をラクにする作業自動化レシピ集

Pythonで1行メモVimスクリプト

先日に引き続きPythonVimに挑戦。
コマンドラインで書き込んだメモをファイルに蓄積していく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