Vimで ToDo リストを書きやすくするために vimでtodoリストを書くためのtips - Qiitaを使わせてもらっていたのですが、もう少しなんとかしたいと思い、少し書き換えてみました。べんり。
- 完了した際に自動的に時刻を挿入する
タスクが完了した際に時刻を行末に自動的に挿入するようにしました。未完了に戻したときは時刻を削除するようにもなっています。 - 未完了時は「赤」、完了時は「緑」にハイライトを設定
視認性向上のために。 - foldmethod を変更
インデントでの折りたたみでは子だけが折りたたまれていました。期待では親から折りたたんでほしかったのでそのように変更しています。 - foldtext を変更
デフォルトの foldtext ではチェックボックスの表示が折りたたまれていない上下のタスクとズレるため変更しています。
フォーク元と同じく ~/.vim/ftplugin/markdown.vim
として保存して使ってください。他のファイルタイプで使いたければ必要に応じて変更してください。
" forked from http://qiita.com/naoty_k/items/56eddc9b76fe630f9be7" todoリストを簡単に入力するabbreviate tl - [ ] " 入れ子のリストを折りたたむsetlocalfoldmethod=expr foldexpr=MkdCheckboxFold(v:lnum) foldtext=MkdCheckboxFoldText() function! MkdCheckboxFold(lnum)let line =getline(a:lnum)let next =getline(a:lnum+1)if MkdIsNoIndentCheckboxLine(line)&& MkdHasIndentLine(next)return1elseif(MkdIsNoIndentCheckboxLine(next)|| next =~'^$')&& !MkdHasIndentLine(next)return'<1'endifreturn'='endfunctionfunction! MkdIsNoIndentCheckboxLine(line)returna:line=~'^- \[[ x]\] 'endfunctionfunction! MkdHasIndentLine(line)returna:line=~'^[[:blank:]]\+'endfunctionfunction! MkdCheckboxFoldText()returngetline(v:foldstart).' ('.(v:foldend - v:foldstart).' lines) 'endfunction" todoリストのon/offを切り替えるnnoremap<buffer><Leader><Leader> :call ToggleCheckbox()<CR>vnoremap<buffer><Leader><Leader> :call ToggleCheckbox()<CR>" 選択行のチェックボックスを切り替えるfunction! ToggleCheckbox()let l:line =getline('.')if l:line =~'\-\s\[\s\]'" 完了時刻を挿入するlet l:result =substitute(l:line, '-\s\[\s\]', '- [x]', '').' ['.strftime("%Y/%m/%d (%a) %H:%M").']'callsetline('.', l:result)elseif l:line =~'\-\s\[x\]'let l:result =substitute(substitute(l:line, '-\s\[x\]', '- [ ]', ''), '\s\[\d\{4}.\+]$', '', '')callsetline('.', l:result)endendfunctionsynmatch MkdCheckboxMark /-\s\[x\]\s.\+/displaycontainedin=ALLhi MkdCheckboxMark ctermfg=green synmatch MkdCheckboxUnmark /-\s\[\s\]\s.\+/displaycontainedin=ALLhi MkdCheckboxUnmark ctermfg=red