Методы в git grep и vim
Примечание: помечено как сообщество wiki
Я код в vim.
Я использую git; и любовь git grep.
Есть ли у кого-нибудь особенно хороший набор методов/скриптов для использования git grep внутри vim?
Читатели: пожалуйста, поддержите ответы с участием vim + git grep; пожалуйста, уменьшите ответы, связанные с редакторами, отличными от vim, и редакторами, ссылающимися на внешние инструменты, кроме git grep.
Ответы
Ответ 1
У вас есть этот расширение VIM (созданный Timo Hirvonen еще в 2006 году!)
git grep <pattern>
выполняет поиск шаблона в текущей выбранной ветки git.
Это добавляет команду :G <pattern>
для запуска команды из 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>)
Вы также можете ограничить поиск файлов, соответствующих шаблону (git выполнит сопоставление с образцом):
:G <pattern> -- '*.c'
Дополнения:
Следующее дополнение будет запускать git grep
в слове под курсором при нажатии Ctrl + X G.
func GitGrepWord()
normal! "zyiw
call GitGrep('-w -e ', getreg('z'))
endf
nmap <C-x>G :call GitGrepWord()<CR>
Ответ 2
Также проверьте fugitive.vim - обертка Git настолько велика, что она должна быть незаконной
(это его официальная строка тегов;)), от Тим Папа (см. Git проект репо):
Он включает среди многих других команд один для 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
Ответ 3
В том же наборе Git инкапсуляции (включая git grep
) у вас есть:
MinSCM: абстрактный интерфейс для Mercurial/Git/Bazaar, от Такеши НИШИДА:
См. Его Git repo
alt text http://bitbucket.org/ns9tks/vim-minscm/wiki/log.png
:MinSCMGrep[!] (Default mapping: \sg)
Ищет указанный шаблон и создает | quickfix | список.
Используемые команды SCM ~
- hg:
grep -n
- Git:
grep -n -e
- bzr: (недоступно)
Ответ 4
У вас также есть этот набор команд vim, из проекта Git git grep vim, от tjennings.
(вдохновленный ack.vim: плагин для модуля Perl/CLI script 'ack' из 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>)
Ответ 5
Я нашел gist, которые открывают результаты из git grep
в окне быстрого поиска, чтобы прыгать:
<C-x><C-x> runs grep for the word under the cursor
:G <word> runs grep
:Gi <word> runs grep as case-insensitive
Просто добавьте содержимое сущности в свой ~/.vimrc
файл