|最近の仕事 |日記 →文書群 |イベント |プロフィール |リンク |情報

バックアップ関数化

前回書いたバージョン違いで保存する方法よりも、もう少し小回りがきくスクリプトを紹介します。

前回と異なる点は、関数 tempname() を使用することで ls! でのバッファ欄に痕跡を残さないこと、行番号を指定することで部分的にバックアップできること、保存した日時と保存後のファイル名をログファイルに出力(追記)することです。

コードが多少長いので、別のページ & ZIP書庫 にしました。vim:モノクロ/ 色分け zip:zip

ユーザーが実際にいじる関数/変数は以下の3つです。

Backup2UsbMemory(dir, compress, ...)
ViewBackupLog(logname, flag)
g:logname

前回と同様、Backup2UsbMemory() の引数の dir は保存先の親ディレクトリ、compress は圧縮方法をそれぞれ文字列で指定します。

ViewBackupLog() はログファイルの作成、閲覧、削除のための関数です。
引数の logname はログファイル名(フルパス)を文字列で指定します。
flag は '' (空文字)ならログをコマンドバッファに表示、'promptdel' ならログファイルの削除(確認あり)、'del' なら確認無しの削除です。

g:logname は Backup2UsbMemory() の内部で参照していますが、ログファイル名を指定します。フルパスを代入してください。(本来は引数で指定するべきだと思いますが...)
ログが必要なければ、コードの 64, 65行目をコメントアウトしてください。

Backup2UsbMemory() には上記のほかに、2つ引数を指定することができます。

Backup2UsbMemory(dir, compress, lnum, end)
" あるいは
Backup2UsbMemory(dir, compress)

実質こんな感じで引数を指定します。lnum は保存対象の開始行、end は終了行です。lnum と end は省略することができます。省略した場合は、バッファ全体がバックアップ対象になります。

lnum と end をどう使うか。僕の場合は以下のようにしています。

Backup2UsbMemory(g:backupdirUsb,'bzip2', search('{{{','Wbn')-1, search('}}}','Wn'))

この例だと、カーソル前の文字列 {{{ の一行前から、カーソル後の文字列 }}} までの間を、バックアップの対象にします。({{{ , }}} は Vim のオプションの foldmethod 値が 'marker' のとき、fold のマーカーとして機能します。)

僕は小説を編集する際に fold を使っていますので、ひとつのファイルの中から部分的にバックアップするのにこの関数を用いています。fold についてはまたページを改めて記述したいと思います。

今回の記事は以上です。
2011/01/31
索引に戻る
inserted by FC2 system