82 presentation.vim (6-1) とにかく明日使いたい
「はっきりいって自己満足」で有名(?)な presentation.vim 。今回のスクリプトはこれ。
http://d.hatena.ne.jp/maedana/20080529/1212059765
presentation.vim の更新は楽しみにしてる。だけど、明日の発表で使いたい。次を待てない!というわけで、とりあえずスライドを現在のバッファから作れるように、勝手に改造した。
現在のバッファを self.slides の形式にあわせて解釈する関数を定義。
" 現在のバッファを適当に解釈して、スライドの形式になおす手抜き関数 " ↓こんな感じで書いとくと良い " *タイトル " 項目1 " 項目2 function! s:LoadSlides() let slides = [] for line in getline(1, '$') if line =~ '^\*' call add(slides, {'title': strpart(line, 1)}) else if empty(slides) let slide = {} else let slide = remove(slides, -1) endif if has_key(slide, 'contents') call add(slide['contents'], '* ' . line) else let slide['contents'] = ['* ' . line] endif call add(slides, slide) endif endfor return slides endfunction
load() メソッドと Enable() 関数をサクっと書き換えて完成。
function! s:Presentation.load(slides) let self.slides = a:slides let self.current = 0 let self.currentLine = 0 endfunction
" プレゼンテーションを有効化する function! s:Enable() set paste set ve=all set laststatus=0 set cursorline highlight CursorLine ctermfg=184 map <buffer> <silent> j :call <SID>ShowNextLine()<CR> map <buffer> <silent> k :call <SID>ShowPrevLine()<CR> map <buffer> <silent> h :call <SID>ShowPrevPage()<CR> map <buffer> <silent> l :call <SID>ShowNextPage()<CR> let slides = s:LoadSlides() call s:Presentation.clearPage() call s:Presentation.load(slides) call s:Presentation.showPageTitle() endfunction
テストデータを作って、動かした。一応動いたのでOK
*1ページ目 あー時間ないのに 彼をツンデレにするのはどうよ はいはい、くふくふ *2ページ目 ポパイ オリーブ オリーブ オリーブ ポパイ *3ページ目 飛んだら負け 崩したら負け 諦めたら負け *4ページ目 </presentation>とかしてる人が居た 開始タグは書かないんですね *5ページ目 さよならByeBye
また本家が外部ファイルに対応したら、そっちにあわせま。時間ねぇ。