2010-03-10 13 views
15

Nota: contrassegnato come wiki della comunitàtecniche in git grep e vim

I codice in vim.

Io uso git; e amo Git Grep.

Qualcuno ha un insieme particolarmente piacevole di tecniche/script per l'utilizzo di git grep all'interno di vim?

Lettori: si prega di invitare le risposte che coinvolgono vim + git grep; si prega di downvotare le risposte che coinvolgono gli editori non vim, e gli editor che si riferiscono a strumenti esterni oltre a git grep.

+2

uno perché non mi rendo conto di quanto preziosa 'git grep' era prima !! (Stavo usando 'ack-grep') – hasen

risposta

6

si dispone di questo VIM extension (creato da Timo Hirvonen nel 2006!)

git grep <pattern> ricerche per un modello in un ramo git attualmente selezionato.
Questo aggiunge il comando :G <pattern> per eseguire il comando da Vim.

func GitGrep(...) 
    let save = &grepprg 
    set grepprg=git\ grep\ -n\ $* 
    let s = 'grep' 
    for i in a:000 
    let s = s . ' ' . i 
    endfor 
    exe s 
    let &grepprg = save 
endfun 
command -nargs=? G call GitGrep(<f-args>) 

È inoltre possibile limitare la ricerca ai file che corrispondono a un modello (git farà il pattern matching):

:G <pattern> -- '*.c' 

Aggiunte:

la seguente aggiunta verrà eseguito git grep sulla parola sotto il cursore quando Ctrl + XViene premuto G.

func GitGrepWord() 
    normal! "zyiw 
    call GitGrep('-w -e ', getreg('z')) 
endf 
nmap <C-x>G :call GitGrepWord()<CR> 
+0

Questo è fantastico. Puoi pubblicare più/tutto ciò che hai su questo? Anche se pubblichi 9 "inutili" linee di interfaccia vim/git-grep, ne vale la pena per il trucco che uso io. – anon

+0

@anon: aggiunto un altro plug-in Vim, come richiesto (vedere la mia seconda risposta) – VonC

+0

Quando uso, questo GitGrep, nasconde prima il mio schermo vim, mostra il risultato di git grep, quindi dopo aver premuto un tasto, mi rimette in vim alla prima riga - c'è un modo per saltare alla prima riga (e nascondere l'output di git grep) – anon

1

Hai anche questo set di comandi Vim, dal progetto Git git grep vim, da tjennings.
(ispirato dal ack.vim : Plugin for the Perl module/CLI script 'ack' da Miles Sterrett)

let g:gitgrepprg="git\\ grep\\ -n" 

function! GitGrep(args) 
    let grepprg_bak=&grepprg 
    exec "set grepprg=" . g:gitgrepprg 
    execute "silent! grep " . a:args 
    botright copen 
    let &grepprg=grepprg_bak 
    exec "redraw!" 
endfunction 

function! GitGrepAdd(args) 
    let grepprg_bak=&grepprg 
    exec "set grepprg=" . g:gitgrepprg 
    execute "silent! grepadd " . a:args 
    botright copen 
    let &grepprg=grepprg_bak 
    exec "redraw!" 
endfunction 

function! LGitGrep(args) 
    let grepprg_bak=&grepprg 
    exec "set grepprg=" . g:gitgrepprg 
    execute "silent! lgrep " . a:args 
    botright lopen 
    let &grepprg=grepprg_bak 
    exec "redraw!" 
endfunction 

function! LGitGrepAdd(args) 
    let grepprg_bak=&grepprg 
    exec "set grepprg=" . g:gitgrepprg 
    execute "silent! lgrepadd " . a:args 
    botright lopen 
    let &grepprg=grepprg_bak 
    exec "redraw!" 
endfunction 

command! -nargs=* -complete=file GitGrep call GitGrep(<q-args>) 
command! -nargs=* -complete=file GitGrepAdd call GitGrepAdd(<q-args>) 
command! -nargs=* -complete=file LGitGrep call LGitGrep(<q-args>) 
command! -nargs=* -complete=file LGitGrepAdd call LGitGrepAdd(<q-args>) 
9

controllare anche fugitive.vim - A Git wrapper so awesome, it should be illegal
(vale a dire il suo cartellino-linea ufficiale;)), da Tim Pope (vedi Git repo project):

Esso include , tra molti altri comandi, uno per un git grep:

call s:command("-bar -bang -nargs=? -complete=customlist,s:EditComplete Ggrep :execute s:Grep(<bang>0,<q-args>)") 
call s:command("-bar -bang -nargs=* -complete=customlist,s:EditComplete Glog :execute s:Log('grep<bang>',<f-args>)") 

function! s:Grep(bang,arg) abort 
    let grepprg = &grepprg 
    let grepformat = &grepformat 
    let cd = exists('*haslocaldir') && haslocaldir() ? 'lcd ' : 'cd ' 
    let dir = getcwd() 
    try 
    execute cd.'`=s:repo().tree()`' 
    let &grepprg = s:repo().git_command('--no-pager', 'grep', '-n') 
    let &grepformat = '%f:%l:%m' 
    exe 'grep! '.a:arg 
    let list = getqflist() 
    for entry in list 
     if bufname(entry.bufnr) =~ ':' 
     let entry.filename = s:repo().translate(bufname(entry.bufnr)) 
     unlet! entry.bufnr 
     elseif a:arg =~# '\%(^\| \)--cached\>' 
     let entry.filename = s:repo().translate(':0:'.bufname(entry.bufnr)) 
     unlet! entry.bufnr 
     endif 
    endfor 
    call setqflist(list,'r') 
    if !a:bang && !empty(list) 
     return 'cfirst' 
    else 
     return '' 
    endif 
    finally 
    let &grepprg = grepprg 
    let &grepformat = grepformat 
    execute cd.'`=dir`' 
    endtry 
endfunction 
0

ho trovato un gist che i risultati aperti da git grep in un finestra di aggiornamento rapido per saltare:

<C-x><C-x> runs grep for the word under the cursor 
:G <word> runs grep 
:Gi <word> runs grep as case-insensitive 

basta aggiungere il contenuto del Gist al ~/.vimrc file di