tokoromのその他の日記
- iPhoneアプリ開発関連: iPhoneアプリ開発まっしぐら★
- それ以外: 寄り道ばかりの お勉強日記★
2009-05-11
セッション(mksession)を利用
毎日同じプロジェクトのコーディングをしているとき、朝vimを立ち上げ、
「昨日編集してたファイルが開いて、カレントディレクトリなんかも昨日と同じ状態で立ち上がったらなー」
なんて思うことがありました。
そんなことは「mksession」コマンドで簡単にできるらしいということは分かっていたのですが、今回、pluginを作る練習も兼ねて
- 前回終了したときの状態に復帰させることができる(:LLS コマンド)
- 任意の状態のスナップショットが簡単なコマンドで取れる(:SS コマンド)
- スナップショットを取ったときの状態に簡単に戻せる(:LS コマンド)
- 場合によってはスナップショットをファイル名を指定して保存&読み込みできる(:SS :LS にファイル名を引数渡しする)
という機能をもった autosession.vim というpluginを作成してみました。
ソースコードは以下のとおりです。
【autosession.vim】
if exists('loaded_autosession') finish endif let loaded_autosession=1 " -------------------------------- " initialize if !exists('g:autosession_session_filename') let g:autosession_session_filename = "~/lastsession_by_autosession.tmp" endif if !exists('g:autosession_one_session_filename') let g:autosession_one_session_filename = "~/onesession_by_autosession.tmp" endif if !exists('g:autosession_auto_save') let g:autosession_auto_save = 1 endif if !exists('g:autosession_auto_load') let g:autosession_auto_load = 0 endif " -------------------------------- " functions " load the last session command! LoadLastSession :call LoadSession(g:autosession_session_filename) command! LLS :call LoadSession(g:autosession_session_filename) " save a session function! SaveSession(...) let l:filename = 0 < a:0 ? expand(a:1) : expand(g:autosession_one_session_filename) exe "mks! " . l:filename endfunction command! -nargs=? SaveSession :call SaveSession(<f-args>) command! -nargs=? SS :call SaveSession(<f-args>) " load a session function! LoadSession(...) let l:filename = 0 < a:0 ? expand(a:1) : expand(g:autosession_one_session_filename) silent only silent tabonly if ( filereadable( l:filename ) ) exe "source " . l:filename else echoerr "autosession.vim: " . l:filename . " is not readable" endif endfunction command! -nargs=? LoadSession :call LoadSession(<f-args>) command! -nargs=? LS :call LoadSession(<f-args>) " -------------------------------- " auto save if ( 1 == g:autosession_auto_save ) au VimLeave * call SaveSession(g:autosession_session_filename) endif " -------------------------------- " auto load if ( 1 == g:autosession_auto_load ) au VimEnter * call LoadSession(g:autosession_session_filename) endif
ここのコードはもっとこうしたほうが良いよー
というようなご意見を頂けるとうれしいです m(_ _)m

早速修正させていただきました。