Eu brinquei com ele e criei o seguinte script. Para torná-lo confiável, tive que fazê-lo lidar com o formato " minMM:SS
", em que MM
e SS
são minutos e segundos.
Eu suspeito que você precise modificar isso de alguma forma para atender às suas necessidades reais, mas o script basicamente começa a contar quando você digita, no modo normal, a seqüência de teclas: \sc
Em seguida, ele interromperá a contagem e anexará à posição do cursor o formato mencionado acima quando você digitar a seqüência de teclas: \ec
Se a linha já contiver um registro de data e hora correspondente ao formato acima, ela será adicionada a ela.
Observe que, se você alterou seu mapleader
, você usaria isso em vez de \
nas sequências de teclas acima.
function! s:Start()
if exists('b:CountMinutesStart')
echohl ERROR
echomsg "Already counting."
echohl NONE
return
endif
echohl TODO
echomsg "Counting started."
echohl NONE
let b:CountMinutesStart = localtime()
endfunction
function! s:Stop()
if !exists('b:CountMinutesStart')
echohl ERROR
echomsg "Not counting."
echohl NONE
return -1
endif
let l:start = b:CountMinutesStart
let l:end = localtime()
unlet b:CountMinutesStart
let l:elapsed = l:end - l:start
echohl TODO
echomsg "Elapsed time since start: " . s:Format(l:elapsed)
echohl NONE
return l:elapsed
endfunction
function! s:Format(seconds)
let l:minutes = a:seconds / 60
let l:seconds = a:seconds % 60
return printf('min%02d:%02d', l:minutes, l:seconds)
endfunction
function! s:InsertTime()
let l:seconds = s:Stop()
if l:seconds == -1
return
endif
let l:line = getline('.')
if l:line =~ 'min\d\{2}:\d\{2}'
let l:tmp = split(substitute(l:line, '.*min\(\d\{2}\):\(\d\{2}\).*', ' ', ''), ' ')
let l:seconds = l:seconds + (l:tmp[0] * 60 + l:tmp[1])
call setline('.', substitute(l:line, 'min\d\{2}:\d\{2}', s:Format(l:seconds), ''))
else
exe 'normal a' . s:Format(l:seconds)
endif
endfunction
command! StartCounting call s:Start()
command! StopCounting call s:InsertTime()
nmap <silent> <leader>sc :StartCounting<cr>
nmap <silent> <leader>ec :StopCounting<cr>