" File: todo.txt.vim " Description: Todo.txt filetype detection " Author: Leandro Freitas , David Beniamine " License: Vim license " Website: http://github.com/dbeniamine/todo.txt-vim " Version: 0.5 " Save context {{{1 let s:save_cpo = &cpo set cpo&vim " General options {{{1 " Some options lose their values when window changes. They will be set every " time this script is invocated, which is whenever a file of this type is " created or edited. setlocal textwidth=0 setlocal wrapmargin=0 " Functions {{{1 function! s:TodoTxtRemovePriority() :s/^(\w)\s\+//ge endfunction function! TodoTxtPrependDate() normal! 0"=strftime("%Y-%m-%d ") P endfunction function! TodoTxtToggleMarkAsDone() if (getline(".") =~ 'x\s*\d\{4\}') :call TodoTxtUnMarkAsDone() else :call TodoTxtMarkAsDone() endif endfunction function! TodoTxtUnMarkAsDone() :s/\s*x\s*\d\{4}-\d\{1,2}-\d\{1,2}\s*//g endfunction function! TodoTxtMarkAsDone() " call s:TodoTxtRemovePriority() call TodoTxtPrependDate() normal! Ix endfunction function! TodoTxtMarkAllAsDone() :g!/^x /:call TodoTxtMarkAsDone() endfunction function! s:AppendToFile(file, lines) let l:lines = [] " Place existing tasks in done.txt at the beggining of the list. if filereadable(a:file) call extend(l:lines, readfile(a:file)) endif " Append new completed tasks to the list. call extend(l:lines, a:lines) " Write to file. call writefile(l:lines, a:file) endfunction function! TodoTxtRemoveCompleted() " Check if we can write to done.txt before proceeding. let l:target_dir = expand('%:p:h') let l:done_file = l:target_dir.'/done.txt' if !filewritable(l:done_file) && !filewritable(l:target_dir) echoerr "Can't write to file 'done.txt'" return endif let l:completed = [] :g/^x /call add(l:completed, getline(line(".")))|d call s:AppendToFile(l:done_file, l:completed) endfunction function! TodoTxtSort() " vim :sort is usually stable " we sort first on contexts, then on projects and then on priority :sort /@[a-zA-Z]*/ r :sort /+[a-zA-Z]*/ r :sort /\v\([A-Z]\)/ r endfunction " Mappings {{{1 " Sort tasks {{{2 if !hasmapto("s",'n') nnoremap