2010-10-01 6 views
0

Quelqu'un dans une question précédente a suggéré ce qui suit pour ajouter horodatages VIM:fonction VIM pour insérer timestamp

nmap <F3> a<C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR><Esc> 
imap <F3> <C-R>=strftime("%Y-%m-%d %a %I:%M %p")<CR> 

Au lieu d'utiliser F3, je voudrais insérer l'horodatage en exécutant une fonction à la place. Par exemple, en tapant: maintenant.

Malheureusement, je ne gêne pas les scripts VIM. Quelqu'un peut-il aider?

+0

Cela peut être utile: http://stackoverflow.com/questions/56052/best-way-to-insert-timestamp-in -vim – Daenyth

+0

Oui Daenyth, c'est la "question précédente" dont j'ai parlé et qui ne répond pas à ma question. – Muchin

+1

@Munchin: Il aurait alors été judicieux de créer un lien. – Daenyth

Répondre

4

:Now n'est pas une fonction, c'est une commande. Vous pouvez créer commande de premier mappage avec le code suivant:

command -nargs=0 -bar Now execute "normal! a\<C-R>=strftime(\"%Y-%m-%d %a %I:%M %p\")\<CR>" 
1
" if not has 'Last Change' in first 5 lines 
fun! InsertChangeLog() 
    let l:flag=0 
    for i in range(1,5) 
     if getline(i) !~ '.*Last Change.*' 
      let l:flag = l:flag + 1 
     endif 
    endfor 
    if l:flag >= 5 
     normal(1G) 
     call append(0, "File: <+Description+>") 
     call append(1, "Created: " . strftime("%a %d/%b/%Y hs %H:%M")) 
     call append(2, "Last Change: " . strftime("%a %d/%b/%Y hs %H:%M")) 
     call append(3, "author: <+digite seu nome+>") 
     call append(4, "site: <+your website+>") 
     call append(5, "twitter: <+your twitter here+>") 
     normal gg 
    endif 
endfun 
" map F4 to insert change log 
map <special> <F4> <esc>:call InsertChangeLog()<cr> 

" update changefile log 
" http://tech.groups.yahoo.com/group/vim/message/51005 
" automaticaly update Last Change whitout change jump list 
" see :h keepjumps 
fun! LastChange() 
    let [email protected]/ 
    let l = line(".") 
    let c = col(".") 
    if line("$") >= 5 
     1,5s/\s*Last Change:\s*\zs.*/\="" . strftime("%Y %b %d %X")/ge 
    endif 
    let @/=_s 
    call cursor(l, c) 
endfun 
autocmd BufWritePre * keepjumps call LastChange() 


" place holders snippets - change map !!! 
" File Templates 
" -------------- 
" <leader>j jumps to the next marker 
" iabbr <buffer> for for <+i+> in <+intervalo+>:<cr><tab><+i+> 
function! LoadFileTemplate() 
    "silent! 0r ~/.vim/templates/%:e.tmpl 
    syn match vimTemplateMarker "<+.\++>" containedin=ALL 
    hi vimTemplateMarker guifg=#67a42c guibg=#112300 gui=bold 
endfunction 
function! JumpToNextPlaceholder() 
    let old_query = getreg('/') 
    echo search("<+.\\++>") 
    exec "norm! c/+>/e\<CR>" 
    call setreg('/', old_query) 
endfunction 
autocmd BufNewFile * :call LoadFileTemplate() 
nnoremap <leader>j :call JumpToNextPlaceholder()<CR>a 
inoremap <leader>j <ESC>:call JumpToNextPlaceholder()<CR>a 
+0

Merci pour le conseil de 'keepjumps' –

Questions connexes