Vim で ToDo リストを書くための Tips (改)
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 - [ ] " 入れ子のリストを折りたたむ setlocal foldmethod=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) return 1 elseif (MkdIsNoIndentCheckboxLine(next) || next =~ '^$') && !MkdHasIndentLine(next) return '<1' endif return '=' endfunction function! MkdIsNoIndentCheckboxLine(line) return a:line =~ '^- \[[ x]\] ' endfunction function! MkdHasIndentLine(line) return a:line =~ '^[[:blank:]]\+' endfunction function! MkdCheckboxFoldText() return getline(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") . ']' call setline('.', l:result) elseif l:line =~ '\-\s\[x\]' let l:result = substitute(substitute(l:line, '-\s\[x\]', '- [ ]', ''), '\s\[\d\{4}.\+]$', '', '') call setline('.', l:result) end endfunction syn match MkdCheckboxMark /-\s\[x\]\s.\+/ display containedin=ALL hi MkdCheckboxMark ctermfg=green syn match MkdCheckboxUnmark /-\s\[\s\]\s.\+/ display containedin=ALL hi MkdCheckboxUnmark ctermfg=red